File.WriteAllText Странность в Windows 7? - PullRequest
2 голосов
/ 19 февраля 2010

Этот заставил меня сойти с ума на некоторое время.

У меня есть приложение, которое ведет себя странно и утверждает, что файлы были написаны, когда они явно не сделали. Это было особенно странно, потому что когда я запускал это приложение в режиме отладки или в папке 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 ]

1 голос
/ 19 февраля 2010

Это связано с функцией виртуализации файлов в Windows Vista (и Windows 7).

Скотт Хансельман писал об этом некоторое время назад и подробно обсуждает, почему он существует.

По сути, программы никогда не должны писать в Program Files. Windows Vista и Windows 7 автоматически «исправляют» старые, плохо работающие программы, перенаправляя эту запись в локальную папку данных пользователя.

0 голосов
/ 19 февраля 2010

Очень интересно .. Может быть, win7 вообще не позволяет писать в программные файлы dir , и вам нужно использовать IsolatedStorage ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...