2016-10-01 3 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 테스트를 위해 아무것도 넣지 말고 False 테스트에'Not'을 사용하십시오 Exists가 True가 아니라면 False 일 수 있기 때문에'ElseIf' 부분이 전혀 필요없고'Else'를 사용할 수 있습니다 – Sehnsucht

+0

@Sehnsucht 예, ElseIf는 습관입니다. 나는 이것을 다시 읽었을 때 (이미 변경됨, btw) = True이면 반환 값에 문제가있는 것입니다. – SokomoKud

답변

0

당신이 다음 64 비트 시스템에서 32 비트 응용 프로그램을 실행하면 file system redirectionC:\Windows\System32는 "SYSTEM32이다 C:\Windows\SysWOW64로 리디렉션됩니다 것을 명심하십시오 "32 비트 응용 프로그램 용 폴더.

당신이 실제 System32 폴더에 액세스하려면 다음 수 중 하나

+0

예, 몇 분 전에 알아 냈습니다. 그러나 옵션을 고쳐 주셔서 감사합니다. 두 폴더를 모두 확인하는 코드를 만들었지 만이 Sysnative 경로가 더 단순 해 보입니다. – SokomoKud

+0

@SokomoKud : 예, Sysnative에 링크 된 첫 번째 기사에서 설명한 것처럼 System32로 해석됩니다. 따라서 System32에 입력하면 SysWOW64가되지만, Sysnative를 입력하면 System32가됩니다. –

0

"문제"를 발견했습니다. 정말 간단합니다; ( dll이 system32에 없더라도 x64 아키텍처에 있기 때문에 sysWOW64의 dll은 File.Exists에서 값을 true로 설정할 수 있습니다 (프로그램에서는 sysWOW64에서이 파일을 사용합니다). system32, 나는 생각한다.)

+0

내가 설명한대로 "C : \ Windows \ Sysnative"를 사용하면 실제 System32에 있는지 여부를 확인할 수 있습니다. :). 32 비트 프로그램 만 SysWOW64 폴더를 사용합니다. –

관련 문제