File.Exists()返回false,但不在调试中

我在这里完全糊涂了,

我的代码抛出exception,因为File.Exists()返回false

public override sealed TCargo ReadFile(string fileName) { if (!File.Exists(fileName)) { throw new ArgumentException("Provided file name does not exist", "fileName"); } 

Visual Studio在throw语句中断,我立即在立即窗口中检查File.Exists(fileName)的值。 它返回true 。 当我将断点重新拖回到if语句并再次执行时,它会再次抛出。

fileName是文件的绝对路径。 我不是在创建文件,也不是写文件(它一直都在那里)。 如果我将路径粘贴到记事本中的打开对话框中,它会毫无问题地读取文件。

代码在后台工作程序中执行。 这是我能想到的唯一复杂因素。 我很肯定文件还没有在工作线程或其他地方打开过。

这里发生了什么?

我不知道发生了什么,但为什么你需要File.Exists测试呢? 你真正感兴趣的是,“我可以阅读这个文件吗?” 除了File Not Found之外的其他许多东西都可能出错。

更不用说,执行File.Exists测试是一种竞争条件,因为在您完成测试之后,但在打开文件之前,文件可能会消失。 只需打开文件,这是您可以做的最佳测试,以确定您是否可以读取该文件。

如果您没有访问引用的文件夹或文件的权限,File.Exists将返回false。 可能您可以在管理员身份的immediates窗口中查看该文件,但在其他上下文中运行时您没有权限。

那么,你的文件名的路径是什么? 请记住,当您构建调试和发布时,您编译到不同的文件夹。 因此,如果您将文件放在调试文件夹中,则在执行发布版本时将无法找到它。

尝试以这种方式编写它:

 if (!Server.Map(fileName)) 

我也遇到过这个问题。 问题是您直接在函数file.exist("complete path manually")中绑定路径file.exist("complete path manually") 。 您应该编写server.mappath("yourfolder name where file resides") ,然后将其与您的图像连接起来。

尝试在路径中添加“.ToString()”。 例如:

 if (!File.Exists(fileName.ToString())) { throw new ArgumentException("Provided file name does not exist", "fileName"); } 

或者,如果连接字符串,将其放在括号中,然后“.ToString”:

 if (!File.Exists((filePath + "SomeRandomName").ToString())) { throw new ArgumentException("Provided file name does not exist", "fileName"); } 

(来自问题)

我不明白为什么“.ToString()”需要放在那里,但它似乎有帮助……

嗯,这次检查后你做了什么样的事情? 在再次拖动断点之前,请确保清理文件状态。