2009-09-28 5 views
4
string[] fileEntries = Directory.GetFiles(pathName, "*.xml"); 

또한 그렇게하지 그것을 강제 할 수있는 방법이 있나요 foo.xml_ 같은 파일을 반환하거나 내가 반환 결과를 필터링하는 코드를 작성해야합니다.정지 암시 와일드 카드()

이것은 명령 프롬프트에서 dir *.xml과 동일한 동작이지만 Windows 탐색기에서 *.xml을 검색하는 것과 다릅니다.

답변

4

피드백 보내기 현재 상태 현재 상태 이것은 의도적으로 설계된 동작입니다. MSDN에서 (주어진 노트 섹션과 예제를 살펴) :

의 searchPattern 정확히 3 문자의 파일 확장자 을 가진 것은 처음 세 문자가 일치 세 또는 이상의 문자의 확장을 가진 파일을 반환 searchPattern에 지정된 파일 확장자는 입니다. 다음과 같이

당신은 그것을 제한 할 수 있습니다 :

C# 2.0 :

string[] fileEntries = Array.FindAll(Directory.GetFiles(pathName, "*.xml"), 
    delegate(string file) { 
     return String.Compare(Path.GetExtension(file), ".xml", StringComparison.CurrentCultureIgnoreCase) == 0; 
    }); 
// or 
string[] fileEntries = Array.FindAll(Directory.GetFiles(pathName, "*.xml"), 
    delegate(string file) { 
     return Path.GetExtension(file).Length == 4; 
    }); 

C# 3.0 :

string[] fileEntries = Directory.GetFiles(pathName, "*.xml").Where(file => 
    Path.GetExtension(file).Length == 4).ToArray(); 
// or 
string[] fileEntries = Directory.GetFiles(pathName, "*.xml").Where(file => 
    String.Compare(Path.GetExtension(file), ".xml", 
     StringComparison.CurrentCultureIgnoreCase) == 0).ToArray(); 
+0

이 보이는 기괴한 행동에 대한 이유의 어떤 생각을? 레거시 8.3 파일 이름 물건? –

+0

2.0 프레임 워크를 대상으로하므로 => 구문을 사용할 수 없습니다. –

+0

@Dan : 익명의 대리자를 사용하도록 업데이트 된 코드입니다. @ 존 Seigel : 네, 맞습니다. MSDN 링크에 대한 또 다른 참고 사항은 "이 메서드는"8.3 파일 이름 형식과 긴 파일 이름 형식으로 파일 이름을 검사합니다. " –

2

그건 인해 창문의 8.3 검색 방법 . "* .xm"을 검색하려고하면 결과가 0 개가됩니다.

당신은 .NET 2.0이를 사용할 수 있습니다

string[] fileEntries = 
Array.FindAll<string>(System.IO.Directory.GetFiles(pathName, "*.xml"), 
      new Predicate<string>(delegate(string s) 
      { 
       return System.IO.Path.GetExtension(s) == ".xml"; 
      }));