Windows 7中的File.WriteAllText怪异?

时间:2010-02-19 17:19:54

标签: file windows-7

这个让我疯了一会儿。

我有一个表现奇怪的应用程序,声称文件是在他们显然没有的时候写的。这特别令人困惑,因为当我在调试模式或我的项目的bin目录中运行此应用程序时,它似乎工作正常。一旦我将它移动到Program Files文件夹中的文件夹,就会发生奇怪的事情。

我花了一段时间跟踪它,但出于某种原因,当我试着写信时:
C:\Program Files\<some path>\test.txt
使用File.WriteAllText,它将被写入:
C:\Users\spencer\AppData\Local\VirtualStore\Program Files\<some path>\test.txt

让我感到困惑的是File.Exists("C:\Program Files\<some path>\test.txt")正在回归真实。

但这似乎并未全面发生。我的应用程序的另一部分使用File.OpenWrite()方法,该方法将文件写入我指定的实际路径,并且不会将文件丢入虚拟商店。

编辑:似乎StreamWriter忽略了指定的路径并且也在虚拟商店中丢弃了文件。

这种行为是否记录在任何地方?

2 个答案:

答案 0 :(得分:1)

这是由于Windows Vista(和Window 7的)文件虚拟化功能。

Scott Hanselman blogged about this前一阵子,并对其存在的原因进行了很好的讨论。

基本上,程序不应该写入Program Files。 Windows Vista和Windows 7通过将此写入重定向到用户的本地数据文件夹,自动“修复”旧的,性能不佳的程序。

答案 1 :(得分:0)

非常有趣..也许win7根本不允许写入程序文件dir ,你必须使用IsolatedStorage ......