如何在Directory.GetFiles()方法中设置多个格式呢?
2015-12-03 07:35
453 查看
什么是语法设置多个文件扩展名的
LINQ是不是一种选择?它必须是一个
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
"*.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()));
}
searchPattern上
Directory.GetFiles()?例如过滤掉的文件与x和的。ascx扩展。
//TODO:Setthestring'searchPattern'toonlygetfileswith //theextension'.aspx'and'.ascx'. varfilteredFiles=Directory.GetFiles(path,searchPattern);
LINQ是不是一种选择?它必须是一个
searchPattern传入
GetFiles,在这个问题中指定。
GetFiles的只能匹配单个模式,但你LINQ调用GetFiles的多模式:
我怕你会做财产以后这样,我从这里突变的正则表达式。
我会尝试像指定
它应该工作。
FileInfo[]collection=(fromfiinnewDirectoryInfo(path).GetFiles()
whereext.Contains(fi.Extension.ToUpper())
selectfi)
.ToArray();
编辑:纠正目录和DirectoryInfo之间因不匹配
///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();
}
{
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);
}
.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(至少它看起来更干净):
.SelectMany(g=>Directory.EnumerateFiles(path,g))
.ToList();
像这样的演示:
{
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()));
}
相关文章推荐
- ULK --- Chap 4: Tasklets (Note)
- Enlightenment E20 发布
- 一、Linux目录结构
- HDU 4366(Successor-块状链表)
- Counting-Sort
- OSChina 周四乱弹 —— 紧箍咒的工作原理
- SQL Tuning Advisor使用实例
- linux shell数据重定向(输入重定向与输出重定向)详细分析
- <Android>在android开发中实现一行文字流动
- linux shell数据重定向(输入重定向与输出重定向)详细分析
- JavaScript数字精度丢失问题总结
- 配置MySQL实现Zabbix代理服务器的性能调优
- 259. 3Sum Smaller
- 脚步语言的评估
- 全球唯一码为主键的好处
- [LeetCode202]Happy Number
- TCAM 与CAM
- 6. 在DIRECT3D中绘图
- java 生产消费者模式(一)
- mysql函数操作(6)