2012-09-28 195 views
2

我尝试搜索使用野生card.My代码文件的文件夹内的文件是:搜索使用通配符

  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"。其work.But如果我给SearchQuery ="a"我想用一个结果

and.jpg 
asp.jpg 

始于a。就是所有文件,也可能内部通配符GetFiles(SearchQuery + "?")。谢谢。

回答

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因为在处理多个文件和目录时,它可以提高资源利用率。

6

使用DirectoryInfo.GetFiles Method (String),你可以用它

* - Zero or more characters. 

? - Exactly one character. 

指定外卡您可以尝试:

dirInfo.GetFiles("a*"); 

?代替你可以使用*在查询得到与searchquery启动文件和以任何其他字符结尾。