2014-12-04 2 views
0

여러 기준에 따라 Directory.EnumerateFiles에서 파일을 제외 할 수 있습니까?여러 기준에 따라 Directory.EnumerateFiles에서 파일 제외

확장에 기반한 필터링이 정상적으로 작동합니다. 그러나 나는 또한 모든 제외 문자열을 포함하는 파일 이름을 걸러 내고 싶습니다. 어떻게하는지 잘 모르겠습니다. fileArray를 반복하고 각 파일 이름을 검사 할 수 있지만 성능이 저하 될 수 있음을 알고 있습니다 ... 맞습니까?

이것은 첫 번째 제외 필터 thumb 만 사용하는 예제 코드입니다. 이제 exclusion 문자열 배열의 모든 요소를 ​​사용해야합니다. 또한 exclusion에 사용 된 문자열은 동적이며 반드시 3 가지 필터 기준 만있을 필요는 없습니다. 이것은 단지 예일뿐입니다.

 Dim ext() As String = Split(".jpg;.gif;.bmp;.tif;.png;.tiff;.jpeg", ";") 
     Dim exclusion() As String = Split("thumb,nothing,empty", ",") 

     Dim fileArray = From chkFile In Directory.EnumerateFiles(fpath, "*.*", SearchOption.TopDirectoryOnly) 
         Where ext.Contains(Path.GetExtension(chkFile).ToLower(System.Globalization.CultureInfo.InvariantCulture)) _ 
         And Not Path.GetFileNameWithoutExtension(chkFile).ToLower(System.Globalization.CultureInfo.InvariantCulture).Contains(exclusion(0).Trim.ToLower) 
+0

아니요 동일하지 않습니다. 나는 그것들을 보았습니다, 그것은 이미 제가하고있는 확장에 의한 필터링입니다. 부분 문자열을 사용하여 결과를 필터링해야합니다. –

답변

3

문자열 대신 FileInfo 개체를 사용하는 한 가지 방법이 있습니다. 이렇게하면 모든 Path 호출이 제거되지만 원하는 경우 쉽게 변경해야합니다.

Dim ext() As String = {".jpg", ".gif", ".bmp", ".tif", ".png", ".tiff", ".jpeg"} 
Dim exclusion() As String = {"thumb", "nothing", "empty"} 
Dim fileArray = From chkFile As FileInfo In New DirectoryInfo(fpath).EnumerateFiles("*.*", SearchOption.TopDirectoryOnly) 
       Where ext.Contains(chkFile.Extension.ToLower(System.Globalization.CultureInfo.InvariantCulture)) _ 
       And Not exclusion.Any(Function(x) chkFile.Name.ToLower(System.Globalization.CultureInfo.InvariantCulture).Contains(x)) 
       Select chkFile 
+0

고마워요, 그게 전부입니다! 나는 단지 정확한 구문을 이해할 수 없었다. –

관련 문제