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。是否可以在内部使用通配符 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)

如果你想要一个查询,你也可以使用 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 回答