文件.存在检测问题

本文关键字:问题 检测 存在 文件 | 更新日期: 2023-09-27 18:22:12

我编写的程序有一个奇怪的问题,其中命令File.Exists()无法在与可执行文件相同的目录中检测到相同的文件。

我有这样的东西:

    if (File.Exists("TextFile1.txt"))
        {
        //do some stuff
        }

但奇怪的是,如果我在cmd提示符下运行这个可执行文件,它不会检测到文件。但是,如果我通过另一个进程启动这个可执行文件,它会检测到File Fine。

对这个奇怪的问题有什么想法吗?谢谢

文件.存在检测问题

这是可执行文件工作目录的相对文件路径。从命令提示符运行应用程序时,工作目录将设置为可执行文件所在的目录。当您通过另一个进程(process.Start)运行此可执行文件时,工作目录是主机进程的工作目录。您可以在运行进程之前修改工作目录,也可以使用绝对文件路径。

另一件需要记住的事情是,如果你运行代码的帐户没有足够的权限访问该文件夹,那么File.Exists可能会返回false。

如果调用方具有所需的权限并且路径包含现有文件的名称;否则为false。此方法还返回如果路径为null、无效路径或长度为零的字符串,则为false。如果调用方没有足够的权限读取指定的文件,则不引发异常,并且无论怎样,该方法都返回false路径的存在。

文件路径是相对于CurrentDirectory的,而不是可执行文件所在的位置。您应该完全限定文件路径,或者获取可执行文件的位置。

由于您使用的是相对路径,我有一种预感,执行程序集的位置并不是您想象的那样。

在您的代码中,尝试检查exe从何处启动:

System.IO.Path.GetDirectoryName( 
  System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );

(来自http://msdn.microsoft.com/en-us/library/aa457089.aspx)

来自MSDN:

允许path参数指定相对路径或绝对路径信息相对路径信息被解释为相对于当前工作目录。获取当前工作目录,请参阅GetCurrentDirectory。

当您查看GetCurrentDirectory:时

当前目录与原始目录不同,原始目录是从中开始处理的。

问题很可能是CurrentDirectory在进程之间有所不同。

但是,另一个问题可能是每个进程都以不同的用户/权限运行,并且命令提示符无法访问文件所在的文件夹。