2013-05-15 3 views
2

주어진 경로가 드라이브의 로컬 경로와 같지 않은 경우 작동하는 것처럼 보이는 매크로를 사용하기 때문에 먼저 경로를 확인해야합니다. 경로는 대소 문자가 현존하는지 여부입니다 . 불행히도 (내 경우) Directory.Exists()은 대소 문자를 구분하지 않습니다.FindFirstFileEx는 대소 문자를 구분하지 않습니다.

그래서 나는 을 dwAdditionalAttributes으로 설정하고 FIND_FIRST_EX_CASE_SENSITIVE을 나타내는 1을 설정하려고했습니다. 그러나 그것은 나를 위해 작동하지 않는 것 같습니다. 내 로컬 경로는 C:\Dir1\Dir2\Dir3입니다. 내가 비교하는 경로는 C:\dir1\Dir2\Dir3입니다. 불행히도 나는 항상 Dir3을 얻습니다. 나는 그 사건들이 일치하지 않으면 공허한 결과를 기대했을 것이다.

내 잘못이 무엇입니까? 기본적으로

string dir = @"C:\Dir1\Dir2\Dir3" + '\0'; 
int FIND_FIRST_EX_CASE_SENSITIVE = 1; 
WIN32_FIND_DATA fi; 

IntPtr h = FindFirstFileEx(dir, 
          FINDEX_INFO_LEVELS.FindExInfoStandard, 
          out fi, 
          FINDEX_SEARCH_OPS.FindExSearchNameMatch, 
          IntPtr.Zero, 
          FIND_FIRST_EX_CASE_SENSITIVE); 
+3

당신 실제 경로는 매개 변수로 전달하는 경로와 동일합니다. 질문에 오타가 있습니까? – ken2k

+1

대소 문자를 구별하지 않는 환경에서 파일 시스템 개체의 대소 문자를 사용하는 대신 다른 방법으로 원래의 문제를 해결해야합니다. 해당 매크로에서 작동하지 않는 것은 무엇입니까? –

+0

@ ken2k 감사합니다. 내 잘못입니다. @ 0xA3 일치하지 않는 경우가 될 때까지 매크로는 폴더 브라우저 대화 상자에서 폴더 확장을 중지합니다. 나는 매크로 자체를 바꿀 수 없다. – theknut

답변

4

이 기능으로 설정되어

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel, REG DWORD obcaseinsensitive을 기대 레지스트리 키 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive가 설정되는 값에 따라 달라집니다 기본값이 아닌 0으로 설정하십시오.

즉, API 자체가 아닌 기본 파일 시스템 설정에 따라 달라집니다. 여기

자세한 내용 : http://www.siao2.com/2010/12/08/10101148.aspx

2

, 윈도우에서 파일 검색에 관계없이 FIND_FIRST_EX_CASE_SENSITIVE의 사용, 대소 문자를 구별하지 않는다.

변경하려면 레지스트리에서 값을 변경해야합니다 (알고있는 한).

은 피투성이 자세한 내용은 여기를 참조하십시오 :

귀하의 경우에는 http://www.nicklowe.org/2012/02/understanding-case-sensitivity-in-windows-obcaseinsensitive-file_case_sensitive_search/

, 나는 1

+0

설정 한 경우 0으로 재부팅해야합니까? FindFirstFileEx가 여전히 무언가를 찾았 기 때문에 ... – theknut

+0

@theknut 예, 재부팅해야합니다. 부팅시에만 읽혀집니다. –

+0

오 세상에 ... 대소 문자를 구분할 수있는 다른 방법이 있습니까? 다른 사람도 그것을 사용할 것이므로 시스템을 재부팅 할 수 있습니다. – theknut

관련 문제