LINQ를 사용하여 특정 디렉터리와 해당 하위 디렉터리에있는 모든 텍스트 파일과 CSV 파일을 가져 오는 병렬 쿼리를 생성하려고합니다. 나는 숨겨진 파일, 임시 파일, 시스템 파일을 속도를 높이기 위해 쿼리가 고려하지 않도록 제외하려고합니다. (디렉토리가 큽니다.) 제가 여기있는 동안 두 개의 서브 디렉토리도 제외하고 싶습니다.LINQ 쿼리에서 연결할 수없는 식 코드
ParallelQuery<string> getFiles =
Directory.EnumerateFiles(@"C:\", "*", SearchOption.AllDirectories)
.AsParallel().Where(f => (
FileAttributes.Hidden == 0 &&
FileAttributes.System == 0 &&
FileAttributes.Temporary == 0 &&
!Path.GetDirectoryName(f).Contains("TempDir") &&
!Path.GetDirectoryName(f).Contains("OtherDir") &&
(Path.GetExtension(f).ToUpper() == ".TXT" ||
Path.GetFileName(f) == "GoodFile.csv")));
내가 출발점으로 this question에 허용 대답을 사용하려고 : 여기에 내 코드입니다. Visual Studio (2013 Express Desktop, 중요한 경우)에서는 certan 하위 디렉토리를 제외하고 결과를 .txt 파일로 제한하여 내게 Unreachable expression code detected
이라고 말하는 7-9 줄에 녹색 밑줄이 표시됩니다. 그러나 .csv 파일이 포함 된 줄은 정상적으로 보입니다. 쿼리를 실행해도 결과가 반환되지 않고 예외가 발생하지 않습니다.
저는 LINQ에 대해 매우 새롭기 때문에이 문제가 뻔뻔 스러울지라도 저를 용서해주십시오. 아무도 이것에 관해 밝혀 줄 수 있습니까? 아니면 이것에 대해 갈 수있는 더 좋은 방법이 있을까요?
이상'FileAttributes.Hidden'은 상수 열거 형 값이며, linq에서 처리중인 파일과 관련이 없습니다 –
답변 해 주셔서 감사합니다! 만약'f => new System.IO.FileInfo (f)'를 사용한다면 여전히'Path.GetExtension (f)'등을 사용할 수 있습니까? –
예. 'f'는 이제'string' 대신'FileInfo'가 될 것이기 때문에'f.Name'을 사용합니다. –