代码之家  ›  专栏  ›  技术社区  ›  Tor Haugen

file.exists()返回false,但不在调试中

  •  4
  • Tor Haugen  · 技术社区  · 15 年前

    我在这里完全困惑了,伙计们,

    我的代码引发异常,因为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语句并再次执行它时,它再次抛出。

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

    代码正在后台工作程序中执行。这是我能想到的唯一复杂的因素。我确信文件尚未打开,无论是在工作线程中还是其他地方。

    这是怎么回事?

    8 回复  |  直到 6 年前
        1
  •  12
  •   Ana Betts    15 年前

    我不知道发生了什么事,但你为什么需要这个文件。存在测试?你真正感兴趣的是,“我可以吗? 读取此文件 ?“除了找不到文件以外,其他很多事情都会出错。

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

        2
  •  6
  •   Julian Martin    15 年前

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

        3
  •  1
  •   Makach    15 年前

    那么,您的文件名的路径是什么?记住,当您构建调试并发布时,您编译到不同的文件夹。因此,如果您将文件放在debug文件夹中,那么在进行发布构建时将找不到该文件。

        4
  •  1
  •   Omar    12 年前

    试着这样写:

    if (!Server.Map(fileName)) 
    
        5
  •  1
  •   Peter Mortensen icecrime    10 年前

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

        6
  •  1
  •   Peter Mortensen icecrime    10 年前

    尝试将“.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()”放在那里,但这似乎有帮助…

        7
  •  0
  •   Peter Mortensen icecrime    10 年前

    嗯,这张支票之后你在做什么?在再次拖动断点之前,请确保正在清除文件状态。

        8
  •  0
  •   Eric Aya    6 年前

    我也遇到了同样的问题,发现将调试和发布配置从anycpu更改为x64可以解决这个问题。