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