2016-08-17 15 views
-1

C#のプログラムで不思議な問題があります。 私は System.IO.Directory.GetFilesとパス内のワイルドカードを使用して検索

"C:\test\AB_Systems\ELEGANCE\CB-DOC\live\M7-091.249.99.XX.01\extobjects". 

今、私は「extobjects」と呼ばれるサブフォルダにPDF-ファイルを検索したい

ようないくつかのローカルfolderpathsを持っています。 残念ながら、そこに「extobjects」という名前のサブフォルダを得た「ライブ」フォルダ内の多くのサブフォルダが、あるので、私はそのようなのsearchpathでワイルドカードを使用する方が良いだろうと思った:

"C:\test\AB_Systems\ELEGANCE\CB-DOC\live\*\extobjects" 

しかし、これは」doesnの仕事。 これを行う方法はありますか?

+0

、ライブで開始し、各ディレクトリについて、(HTTP [特定のサブディレクトリにワイルドカードでディレクトリをスキャンする方法] theresのextobjects場合..そこでの – BugFinder

+0

が重複する可能性を見て:// stackoverflowの.com/questions/13815564/how-to-scan-a-directory-with-wildcard-with-a-specific-サブディレクトリ) – Ultraviolet

答えて

1
public static FileInfo[] findFile(String whereToSearch, String searchFor , String mode) 
    { 
     IEnumerable<FileInfo> files = null; 
     if (mode.Equals("")) 
      mode = "s"; 

     if (searchFor.Equals("")) 
      searchFor = "*"; 

     if (mode.Equals("r") || mode.Equals("recursive")) 
     { 
      DirectoryInfo dir = new DirectoryInfo(whereToSearch); 
      files = dir.EnumerateFiles(searchFor, searchOption: SearchOption.AllDirectories); 
     } 

     if (mode.Equals("s") || mode.Equals("specific")) 
     { 
      DirectoryInfo dir = new DirectoryInfo(whereToSearch); 
      files = dir.EnumerateFiles(searchFor, searchOption: SearchOption.TopDirectoryOnly); 
     } 

     if (files != null) return files.ToArray<FileInfo>(); 
     else return null; 
    } 

これはその実行例です。

ファイル名には*のようなワイルドカードパターンを含めることができます。 Pathは、検索を開始する場所と、のsearchOption:searchOption.AllDirectoriesを引数として指定することができます。これは引数として、エントリパスのすべてのサブディレクトリを通過します。

パスと詳細情報を含むオブジェクトのFileInfoの配列を受け取ります。

0

あなたはこのようにLINQを使用することができます。

var files = Directory 
    .EnumerateDirectories(@"C:\test\AB_Systems\ELEGANCE\CB-DOC\live", "extobjects", SearchOption.AllDirectories) 
    .SelectMany(x => Directory.EnumerateFiles(x, "*pdf", SearchOption.TopDirectoryOnly)) 
    .ToArray(); 
0

を私はあなたの.NETターゲットがそれをサポートしている場合は、LINQクエリに次のforeachループを最適化することができ、BugFinderが提案まさにソリューションを選択すると思います。確かに

 // Itterate subdirectories of the live folder 
     foreach (var subDir in Directory.GetDirectories(@"C:\test\AB_Systems\ELEGANCE\CB-DOC\live")) 
     { 
      // Check if path to extobjects exists 
      var extObjects = Path.Combine(subDir, "extobjects"); 
      if (Directory.Exists(extObjects)) 
      { 
       var pdfFiles = Directory.GetFiles(extObjects, "*").Where(x=>x.EndsWith(".pdf")); 
       // Do something with the pdf file paths 
      } 
     } 
関連する問題