我们有一些 C# 代码使用 StreamReader 从文本文件中读取数据。在一台计算机上,我们可以从文本文件中读取数据,即使它已被删除或替换为不同的文本文件 - File.Exists 调用报告该文件存在,即使它不在 Windows 资源管理器中。但是,在另一台计算机上不会发生这种行为。两台计算机都运行 Vista Business 和 .NET 2.0.50727 SP2。
我们已尝试在没有解决方案的情况下重新启动机器。
有没有人了解这如何可能以及有关可能解决方案的信息?
谢谢,艾伦
我们有一些 C# 代码使用 StreamReader 从文本文件中读取数据。在一台计算机上,我们可以从文本文件中读取数据,即使它已被删除或替换为不同的文本文件 - File.Exists 调用报告该文件存在,即使它不在 Windows 资源管理器中。但是,在另一台计算机上不会发生这种行为。两台计算机都运行 Vista Business 和 .NET 2.0.50727 SP2。
我们已尝试在没有解决方案的情况下重新启动机器。
有没有人了解这如何可能以及有关可能解决方案的信息?
谢谢,艾伦
来自MSDN
Exists 方法不应用于路径验证,该方法仅检查路径中指定的文件是否存在。
请注意,在您调用 Exists 方法和对文件执行其他操作(例如删除)之间,另一个进程可能会对文件执行某些操作。推荐的编程实践是将 Exists 方法和您对文件执行的操作包装在 try...catch 块中,如示例中所示。这有助于缩小潜在冲突的范围。Exists 方法只能帮助确保文件可用,它不能保证。
这可能是文件夹虚拟化问题吗?
文件是否在被删除之前被打开以供阅读?如果是这样,即使在文件系统以其他方式放开文件之后,仍然能够从打开的文件中读取数据也就不足为奇了。
回复File.Exists()
::
File.Exists
天生容易出现竞争条件。它不应用作在执行某些操作之前验证文件是否存在的唯一方式。此错误经常会导致您的软件出现安全漏洞。
相反,始终处理可能从您打开的实际文件操作等中引发的异常,并在打开后验证您的输入。