【问题标题】:C# can read from a file that doesn't exist?C# 可以读取不存在的文件吗?
【发布时间】:2009-09-01 11:15:17
【问题描述】:

我们有一些使用 StreamReader 从文本文件中读取数据的 C# 代码。在一台计算机上,我们可以从文本文件中读取数据,即使它已被删除或替换为不同的文本文件 - File.Exists 调用报告该文件存在,即使它不在 Windows 资源管理器中。但是,在另一台计算机上不会发生这种行为。两台计算机都运行 Vista Business 和 .NET 2.0.50727 SP2。

我们已尝试重新启动机器,但没有解决。

有没有人了解这如何可能以及有关可能的解决方案的信息?

谢谢, 艾伦

【问题讨论】:

  • 其中一台 PC 是 64 位机器吗?
  • 你的文件路径是相对根目录(绝对路径)吗?
  • 向我们展示您正在使用的“File.Exists”代码
  • 没有一台电脑是 64 位的,路径是绝对的。

标签: c# file windows-vista streamreader


【解决方案1】:

来自MSDN

Exists 方法不应用于路径验证,此方法仅检查路径中指定的文件是否存在。
请注意,在您调用的时间之间,另一个进程可能会对该文件执行某些操作Exists 方法并对文件执行另一个操作,例如删除。推荐的编程实践是将 Exists 方法和您对文件执行的操作包装在 try...catch 块中,如示例中所示。这有助于缩小潜在冲突的范围。 Exists 方法只能帮助确保文件可用,不能保证。

【讨论】:

    【解决方案2】:

    这可能是folder virtualization 问题吗?

    【讨论】:

    • 这将是我的第一个猜测。
    • 感谢您的帮助,文件夹虚拟化导致了冲突。
    • Vista 真的很有趣,我根本不知道文件夹虚拟化,但是在阅读链接上的文章后,让我笑了,程序员可以花一生的时间来了解哪里出了问题!
    【解决方案3】:

    文件在被删除之前是否已打开以供阅读?如果是这样,即使文件系统放开它,仍然能够从打开的文件中读取它并不意外。

    回复:File.Exists()

    File.Exists 天生就容易出现竞争条件。它不应用作在执行某些操作之前验证文件是否存在的唯一方式。此错误经常会导致您的软件出现安全漏洞。

    相反,始终处理可能从您打开的实际文件操作等中引发的异常,并在打开后验证您的输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 2012-06-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多