File.Exists возвращает true для файла, который не существует - PullRequest
7 голосов
/ 30 ноября 2010

Я работаю над приложением, которое сохраняет файл в Path.GetDirectoryName(FilePath), где FilePath = Application.ExecutablePath, который содержит некоторую информацию о лицензировании.Если я запускаю программу из VS, она работает нормально, но если я делаю установщик и устанавливаю, а затем запускаю его, программа считает, что файл уже существует.Я изменил свою программу, чтобы в окне сообщения отображался мой FilePath и File.Exists(FilePath) возвращает true или false.Так что я посмотрел по этому пути, позволил показывать скрытые и системные файлы, несколько раз F5 и ничего.Файл не существует, но File.Exists(FilePath) возвращает true.Любая идея, почему это происходит, и как я могу обойти это?

Я использую Windows Vista, Visual Studio 2010, C # и создал мой установщик с установочным проектом VS.

Редактировать: Мой путь: C: \ Program Files (x86) \ Helium \ License.xml .

Это часть моего кода:

        MessageBox.Show("LicenseFileName: " + LicenseFileName); // LicenseFileName: C:\Program Files (x86)\Helium\License.xml
        System.Diagnostics.Process.Start(LicenseFileName);      // Nothing happens
        MessageBox.Show("File.Exists(LicenseFileName): " + File.Exists(LicenseFileName)); // File.Exists(LicenseFileName): true

Забыл сказать, что у меня уже было приложение, установленное ранее, поэтому файл раньше существовал.Я удалил с помощью панели управления.

1 Ответ

22 голосов
/ 30 ноября 2010

Если вы выполняете установку в системную папку, возможно, что виртуализация файлов Windows включилась и создала копию файлов для каждого пользователя.Таким образом, ваши файлы могут находиться где-то в папке% userprofile% \ AppData \ Local \ VirtualStore

...