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