代码之家  ›  专栏  ›  技术社区  ›  Spencer Ruport

Windows 7中的file.writeAllText奇怪?

  •  2
  • Spencer Ruport  · 技术社区  · 15 年前

    这一次让我疯狂了一段时间。

    我有一个行为怪异的应用程序,声称文件是在他们显然没有写的时候写的。尤其令人困惑的是,当我以调试模式或项目的bin目录运行这个应用程序时,它似乎工作得很好。当我把它移到程序文件文件夹中的一个文件夹时,奇怪的事情就开始发生了。

    我花了一段时间才找到它,但出于某种原因,当我试图写信给:
    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 回复  |  直到 15 年前
        1
  •  1
  •   Reed Copsey    15 年前

    这是由于WindowsVista(和Windows7)的文件虚拟化功能。

    Scott Hanselman blogged about this 一段时间以前,提供了一个关于它为什么存在的伟大讨论。

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

        2
  •  0
  •   Gopher    15 年前

    很有趣……也许Win7不允许写入 程序文件目录 你必须使用 IsolatedStorage