Файл не отображается в проводнике, но VB.NET открывает его

Моя программа записывает некоторые файлы по системному пути Windows (C:\windows\syswow64...).

Один из этих файлов был удален по причине теста, мы что-то меняем, и нам нужно его удалить. ОК, здесь нет проблем, файл пропал (почти...). Проблема в том, что мое приложение все еще получает файл! Это весело, потому что я действительно удаляю файл (shift+del)

Я проверяю, существует ли файл с классом FileInfo.

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

Спасибо

Мой код ниже:

Public Shared Function GetUserConfigFile() As String
    Dim UserConfigFile As String = Metodos.GetUserConfigPath("config.gf")
    'Above we have C:\Windows\SysWOW64\Microsoft\....\config.gf

    Dim ConfigFile As New IO.FileInfo(UserConfigFile)
    ConfigFile.Refresh()

    EventLog.RegisterDebugMessage("ConfigFile.Exists:{0};ConfigFile.Length:{1}", ConfigFile.Exists, ConfigFile.Length)
    If ((ConfigFile.Exists AndAlso ConfigFile.Length = 0) OrElse Not ConfigFile.Exists) Then
        Dim config As StreamWriter = IO.File.CreateText(UserConfigFile)
        config.WriteLine("<?xml version=""1.0""?><cnfg></cnfg> ")
        config.Close()
        config.Dispose()
    End If
    EventLog.RegisterDebugMessage("config.gf -> {0}", IO.File.ReadAllText(UserConfigFile))
    '''''''''''And here it's show me the content of the file... -.-''''''

    Return UserConfigFile
End Function

2 ответа

Решение

На очень похожей ноте к тому, что сказал Марк Питерс, еще одна вещь, которая может произойти, это перенаправление данных UAC, потому что у вас нет прав записи в эту папку, так что вы действительно видите файлы, расположенные в %LOCALAPPDATA%\VirtualStore\Windows\System32, Ваше приложение работает с правами администратора, если нет, файлы пропадают, когда это делает?

У меня гораздо более длинный пост, описывающий аналогичную проблему в Super User.

Кроме того, почему вам "нужно", чтобы ваша программа обращалась к файлам в каталоге Windows? Что вы делаете, что добавляет это требование к вашей программе?

Я предполагаю, что вы попали в перенаправитель файловой системы ( MSDN)

В большинстве случаев, когда 32-разрядное приложение пытается получить доступ к%windir%\System32, доступ перенаправляется на%windir%\SysWOW64. Доступ к%windir%\lastgood\system32 перенаправляется на%windir%\lastgood\SysWOW64. Доступ к%windir%\regedit.exe перенаправляется в%windir%\SysWOW64\regedit.exe.

В папках System32 и SYSWOW64 происходит что-то волшебное. (По иронии судьбы, 32-разрядные файлы хранятся в WOW64, а 64-разрядные файлы хранятся в System32).

Страница MSDN предлагает возможное решение:

32-разрядные приложения могут получить доступ к собственному системному каталогу, заменив% windir% \ Sysnative на%windir%\System32. WOW64 распознает Sysnative как специальный псевдоним, используемый для указания того, что файловая система не должна перенаправлять доступ. Этот механизм является гибким и простым в использовании, поэтому он является рекомендуемым механизмом для обхода перенаправления файловой системы. Обратите внимание, что 64-разрядные приложения не могут использовать псевдоним Sysnative, поскольку это виртуальный каталог, а не реальный.

Другие вопросы по тегам