2010-02-19 2 views
2

На этот раз я сошел с ума на некоторое время.File.WriteAllText Weirdness В 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(), который будет записывать файл в указанный фактический путь и не помещает файл в виртуальный магазин.

EDIT: Кажется, что StreamWriter игнорирует указанный путь и бросает файлы в виртуальном магазине.

Является ли это поведение документированным где угодно?

ответ

1

Это связано с возможностью виртуализации файлов Windows Vista (и Window 7).

Scott Hanselman blogged about this a назад, и дает отличное обсуждение того, почему оно существует.

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

+0

Ну они забыли «исправить» 'File.OpenWrite()' , Также, где я должен сохранять данные, которые применяются ко всем пользователям? –

+0

Спенсер: Ты действительно не должен этого делать. Часть «разработки для Vista» заключается в том, что пользовательские данные должны быть изолированы. Сохранение данных, общих для всех пользователей, требует повышенных разрешений и, вероятно, должно быть выполнено во время установки программного обеспечения (поскольку у вас будут права администратора в этот момент времени). –

+0

+ Я не уверен, что его статья совершенно правильная. У меня есть права на запись в папку. –

0

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