2016-10-01 5 views
0

Перед тем, как задать вопрос, извините за мой английский, это не мой родной язык.File.Exists всегда возвращает true, даже если файл не существует

Я думаю, что название объясняет сам, я пытаюсь узнать, есть ли на ПК пользователя DLL в папке system32, но даже если я переведу .dll на рабочий стол (для целей тестирования), File.Exists вернет True.

код я использую:

Imports System.IO 
Public sys32Path As String = "C:\Windows\System32\" 

If File.Exists(sys32Path + "d3dx9_42.dll") = True Then 
       ListBox1.Refresh() 
       ListBox1.Items.Add(sys32Path + "d3dx9_42.dll | Found !") 
       fstDLL = True 

ElseIf File.Exists(sys32Path + "d3dx9_42.dll") = False Then 
       ListBox1.Refresh() 
       ListBox1.Items.Add("d3dx9_42.dll | Missing !") 
       fstDLL = False 
End If 
+0

Полностью в стороне от вопроса, и не очень важно, вам не нужно ставить '= True' или' = False', 'File.Exists' уже возвращают True или False, поэтому вы должны не помещайте ничего для теста True и используйте «Не» для теста False. Кроме того, вам не нужна часть «ElseIf» вообще и может просто использовать «Else», потому что если Exists не является True, это может быть только False. – Sehnsucht

+0

@Sehnsucht Да, для ElseIf это привычка, когда я перечитываю, я меняю это (уже изменено, кстати). Вещь о = Истина в том, что без нее у меня были проблемы со значением, которое возвращалось. – SokomoKud

ответ

0

Имейте в виду, что если вы используете 32-разрядные приложения на 64-битной системе, то file system redirection вызывает C:\Windows\System32 быть перенаправлены на C:\Windows\SysWOW64, который является «System32 "для 32-разрядных приложений.

Если вы хотите получить доступ к фактической папке System32, то вы можете либо:

+0

Да, я только что понял это несколько минут назад, но спасибо за возможные варианты исправления, я просто сделал код для проверки обеих папок, но этот путь Sysnative выглядит более простым. – SokomoKud

+0

@SokomoKud: Да, как указано в первой статье, связанной с Sysnative, будет интерпретироваться как System32. Поэтому, если вы введете System32, это приведет к SysWOW64, но если вы введете Sysnative, это приведет к System32. –

0

Я нашел «проблему». Действительно ли это так просто: ( Поскольку я в архитектуре x64, даже когда DLL не находится в system32, dll в sysWOW64 может установить значение true в File.Exists (и программы используют его из sysWOW64, если они не находятся в system32, я думаю)

+0

Использовать «C: \ Windows \ Sysnative», как я объяснил, и вы сможете проверить, действительно ли это в фактической System32 или нет :). Только 32-разрядные программы используют папку SysWOW64. –

Смежные вопросы