您的位置:首页 > 其它

如何在Directory.GetFiles()方法中设置多个格式呢?

2015-12-03 07:35 453 查看
什么是语法设置多个文件扩展名的
searchPattern
Directory.GetFiles()
?例如过滤掉的文件与x和的。ascx扩展。

//TODO:Setthestring'searchPattern'toonlygetfileswith
//theextension'.aspx'and'.ascx'.
varfilteredFiles=Directory.GetFiles(path,searchPattern);


LINQ是不是一种选择?它必须是一个
searchPattern
传入
GetFiles
,在这个问题中指定。

varfilteredFiles=Directory .GetFiles(path,"*.*") .Where(file=>file.ToLower().EndsWith("aspx")||file.ToLower().EndsWith("ascx")) .ToList();

GetFiles的只能匹配单个模式,但你LINQ调用GetFiles的多模式:

FileInfo[]fi=newstring[]{"*.txt","*.doc"} .SelectMany(i=>di.GetFiles(i,SearchOption.AllDirectories)) .Distinct().ToArray();

我怕你会做财产以后这样,我从这里突变的正则表达式。

varsearchPattern=newRegex( @"$(?<=\.(aspx|ascx))", RegexOptions.IgnoreCase); varfiles=Directory.GetFiles(path).Where(f=>searchPattern.IsMatch(f));

我会尝试像指定

varsearchPattern="as?x";

它应该工作。



varext=newstring[]{".ASPX",".ASCX"};
FileInfo[]collection=(fromfiinnewDirectoryInfo(path).GetFiles()
whereext.Contains(fi.Extension.ToUpper())
selectfi)
.ToArray();

编辑:纠正目录和DirectoryInfo之间因不匹配

///<summary>
///ReturnsthenamesoffilesinaspecifieddirectoriesthatmatchthespecifiedpatternsusingLINQ
///</summary>
///<paramname="srcDirs">Thedirectoriestoseach</param>
///<paramname="searchPatterns">thelistofsearchpatterns</param>
///<paramname="searchOption"></param>
///<returns>Thelistoffilesthatmatchthespecifiedpattern</returns>
publicstaticstring[]GetFilesUsingLINQ(string[]srcDirs,
string[]searchPatterns,
SearchOptionsearchOption=SearchOption.AllDirectories)
{
varr=fromdirinsrcDirs
fromsearchPatterninsearchPatterns
fromfinDirectory.GetFiles(dir,searchPattern,searchOption)
selectf;
returnr.ToArray();
}


  

publicstaticboolCheckFiles(stringpathA,stringpathB)
{
string[]extantionFormat=newstring[]{".war",".pkg"};
returnCheckFiles(pathA,pathB,extantionFormat);
}
publicstaticboolCheckFiles(stringpathA,stringpathB,string[]extantionFormat)
{
System.IO.DirectoryInfodir1=newSystem.IO.DirectoryInfo(pathA);
System.IO.DirectoryInfodir2=newSystem.IO.DirectoryInfo(pathB);
//Takeasnapshotofthefilesystem.list1/2willcontainonlyWARorPKG
//files
//fileInfosAwillcontainalloffilesunderpathdirectories
FileInfo[]fileInfosA=dir1.GetFiles("*.*",
System.IO.SearchOption.AllDirectories);
//listwillcontainalloffilesthathave..extantion[]
//Runonallextantioninextantionarrayandcomparethembylowercaseto
//thefileitemextantion...
List<System.IO.FileInfo>list1=(fromextIteminextantionFormat
fromfileIteminfileInfosA
whereextItem.ToLower().Equals
(fileItem.Extension.ToLower())
selectfileItem).ToList();
//Takeasnapshotofthefilesystem.list1/2willcontainonlyWARor
//PKGfiles
//fileInfosAwillcontainalloffilesunderpathdirectories
FileInfo[]fileInfosB=dir2.GetFiles("*.*",
System.IO.SearchOption.AllDirectories);
//listwillcontainalloffilesthathave..extantion[]
//Runonallextantioninextantionarrayandcomparethembylowercaseto
//thefileitemextantion...
List<System.IO.FileInfo>list2=(fromextIteminextantionFormat
fromfileIteminfileInfosB
whereextItem.ToLower().Equals
(fileItem.Extension.ToLower())
selectfileItem).ToList();
FileComparemyFileCompare=newFileCompare();
//Thisquerydetermineswhetherthetwofolderscontain
//identicalfilelists,basedonthecustomfilecomparer
//thatisdefinedintheFileCompareclass.
returnlist1.SequenceEqual(list2,myFileCompare);
}


varfilteredFiles=Directory
.EnumerateFiles(path,"*.*")//.NET4betterthan`GetFiles`
.Where(
//ignorecasefasterthantolower...
file=>file.ToLower().EndsWith("aspx")
||file.EndsWith("ascx",StringComparison.OrdinalIgnoreCase))
.ToList();


  

不要忘了新的.NET4
Directory.EnumerateFiles
对于性能提升(什么是目录之间的差异。与Directory.GetFiles?)“IGNORECASE”应该比“TOLOWER”快或者,它可能会更快splitting的glob(至少它看起来更干净):

"*.ext1;*.ext2".Split(';')
.SelectMany(g=>Directory.EnumerateFiles(path,g))
.ToList();


像这样的演示:

voidMain()
{
foreach(varfinGetFilesToProcess("c:\\",new[]{".xml",".txt"}))
Debug.WriteLine(f);
}
privatestaticIEnumerable<string>GetFilesToProcess(stringpath,IEnumerable<string>extensions)
{
returnDirectory.GetFiles(path,"*.*")
.Where(f=>extensions.Contains(Path.GetExtension(f).ToLower()));
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: