这个让我疯了一会儿。
我有一个表现奇怪的应用程序,声称文件是在他们显然没有的时候写的。这特别令人困惑,因为当我在调试模式或我的项目的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
忽略了指定的路径并且也在虚拟商店中丢弃了文件。
这种行为是否记录在任何地方?
答案 0 :(得分:1)
这是由于Windows Vista(和Window 7的)文件虚拟化功能。
Scott Hanselman blogged about this前一阵子,并对其存在的原因进行了很好的讨论。
基本上,程序不应该写入Program Files。 Windows Vista和Windows 7通过将此写入重定向到用户的本地数据文件夹,自动“修复”旧的,性能不佳的程序。
答案 1 :(得分:0)
非常有趣..也许win7根本不允许写入程序文件dir ,你必须使用IsolatedStorage
......