2017-01-21 3 views
0

디렉토리에서 파일 경로가 포함 된 문자열 목록을 가져 오려고합니다. 사용자는 쉼표로 구분 된 형식 (예 : "gif, jpg")으로 파일 확장명을 지정합니다. 이것은 내 코드입니다.Linq가 문자열 목록에서 작동하지 않습니다.

private static List<string> GetFiles(string DirectoryPath, string Extensions) 
     { 
      List<string> FilePaths = new List<string>(); 

      if (Directory.Exists(DirectoryPath)) 
      { 
       //Calling this line more than once is not allowed. 
       List<string> AllFiles = Directory.EnumerateFiles(DirectoryPath, "*.*", SearchOption.AllDirectories).ToList(); 

       if (!string.IsNullOrEmpty(Extensions) && !string.IsNullOrWhiteSpace(Extensions)) 
       { 
        foreach (string Extension in Extensions.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) 
        { 
         List<string> SearchedFiles = AllFiles.Where(f => f.EndsWith(Extension)).ToList(); 

         FilePaths.AddRange(SearchedFiles); 
        } 
       } 
       else FilePaths.AddRange(AllFiles); 
      } 
      return FilePaths; 
     } 

코드는 정상적으로 작동하지만 첫 번째 확장에 대한 결과 만 검색하고 다음 후속 확장에 대한 결과는 검색하지 않습니다. foreach 루프의 첫 번째 줄에 지정된 Linq를 무시합니다.이 경우 SearchedFiles를 초기화하면 0 개의 결과가있는 목록과 같습니다. 분할 기능이 후속 확장 기능을 제공하지 않는 것 같지만 올바르게 작동합니다. 또한 .으로 지정된 확장을 시도했지만 작동하지 않았습니다.

참고 : 디렉터리를 여러 번 검색하지 않으려합니다.

답변

3

두 번째 확장 프로그램의 시작 부분에 다음과 같은 공백이 있습니다 (색인> 0).

단순히 트림 :

f.EndsWith(Extension.Trim()); 
+0

아를. 문제가 해결되었습니다. 감사. – LeCdr

관련 문제