2

ワイルド カードを使用してファイルを検索しようとしています。私のコードは次のとおりです。

          string  SearchQuery ='';
           List<ATTFile> lstFiles = new List<ATTFile>();
            if (Directory.Exists(FilePath))
            {
                DirectoryInfo dirInfo = new DirectoryInfo(FilePath);//File PAth is not a problem.

              foreach (FileInfo file in dirInfo.GetFiles(SearchQuery + "?"))//Want help here  
              {

                    ATTFile obj = new ATTFile();
                    obj.FileName = file.Name;
                    obj.Folder = file.Directory.ToString();
                    obj.Size = int.Parse(file.Length.ToString());
                    obj.Extension = file.Extension;
                    lstFiles.Add(obj);

                }


            }

完全なファイル名を指定するとコードが機能します。例: ディレクトリ内に次のファイルがあります。

and.jpg
asp.jpg
bb.jpg
cc.jpg 

上記のコードを使用して完全なファイル名を指定すると、その作業は.その作業を意味しSearchQuery ="and.jpg"ます.しかし、私が与えるSearchQuery ="a"と結果が必要です

and.jpg
asp.jpg

すべてのファイルをa.Is it possible でワイルドカードを使用して 開始します.Thanks GetFiles(SearchQuery + "?").

4

2 に答える 2

6

DirectoryInfo.GetFiles Method (String)を使用します。ワイルドカードを指定できます

* - Zero or more characters.

? - Exactly one character.

あなたが試すことができます:

dirInfo.GetFiles("a*");

代わりに、クエリで?使用して、他の文字で始まり、他の文字で終わるファイルを取得できます。*searchquery

于 2012-09-28T09:33:54.980 に答える
5

overload検索パターンを取るを使用できます。

String fileNamePart = "a";
String fileExtension= ".jpg";
String searchPattern = String.Format("{0}*{1}", fileNamePart, fileExtension);
dirInfo.GetFiles(searchPattern)

すべてを 1 つのクエリにまとめたい場合は、LINQ を使用することもできます。

lstFiles = dirInfo.EnumerateFiles(searchPattern)
                  .Select(file => new ATTFile(){
                      FileName = file.Name;
                      Folder = file.Directory.ToString();
                      Size = int.Parse(file.Length.ToString());
                      Extension = file.Extension;
                  }).ToList();

DirectoryInfo.EnumerateFiles多くのファイルとディレクトリを操作している場合、リソース効率が向上する可能性があるため、ここで使用していることに注意してください。

于 2012-09-28T09:38:01.687 に答える