2016-10-01 176 views
0

在問題之前,對不起我的英語,不是我的母語。即使文件不存在,File.Exists也會返回true

我認爲標題說明了自己,我想知道用戶PC是否在system32文件夾中有dll,但即使我將.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測試做任何事情,並且使用'Not'來進行False測試。更多,你根本不需要'ElseIf'部分,並且可以使用'Else',因爲如果Exists不是True,它只能是False。 – Sehnsucht

+0

@Sehnsucht是的,因爲ElseIf是一個習慣,當我重新閱讀時,我改變了這個(已經改變了,btw) 關於= True的事情是,沒有它,我遇到了問題,返回的值是 – SokomoKud

回答

0

請記住,如果你運行在64位系統上的32位應用程序,然後file system redirection導致C:\Windows\System32被重定向到C:\Windows\SysWOW64這是「System32下「32位應用程序的文件夾。

如果您要訪問的實際System32文件夾中,那麼你既可以:

+0

是的,我只是想了幾分鐘前,但感謝您的選項來糾正,我只是做代碼來檢查這兩個文件夾,但這個系統性的路徑似乎更簡單。 – SokomoKud

+0

@SokomoKud:是的,正如我在第一篇文章中指出的那樣,我鏈接到Sysnative將被解釋爲System32。所以,如果你輸入System32它將導致SysWOW64,但如果你輸入Sysnative它將導致System32。 –

0

我發現了「問題」。真的很簡單;( 因爲我在x64體系結構中,即使dll不在system32中,sysWOW64中的dll也可以在File.Exists中將值設置爲true(並且程序在sysWOW64中使用它,如果不在system32,我認爲)

+0

正如我所解釋的那樣使用「C:\ Windows \ Sysnative」,並且您將能夠檢查它是否真的在實際的System32中:)。只有32位程序使用SysWOW64文件夾。 –

相關問題