我正在尝试处理140个目录。根据我的测试,有139个目录与我的文件模式(*abc.txt)匹配。
我正在尝试查找%1目录,以验证它实际上没有*abc.txt。
我该怎么做呢?
以下代码为我提供了140个目录号码:
var directoryCount = from subdirectory in Directory.GetDirectories(paramStartFilePath, "*", SearchOption.AllDirectories)
where Directory.GetDirectories(subdirectory).Length == 0
select subdirectory;我收集基于模式的文件,如下所示:
dirInfoFiles= new DirectoryInfo(startFilePath);
IEnumerable<FileInfo> listFiles = dirInfoFiles.EnumerateFiles("*abc.txt, System.IO.SearchOption.AllDirectories);我怎样才能找到不包含我的.txt文件的目录?
发布于 2013-06-25 06:40:11
总是有通过村方法来运行水箱:只需枚举*.*,然后排除不匹配的模式。
发布于 2013-06-25 06:39:34
如果您希望所有目录中至少包含一个名称以“abc”结尾的txt-file:
IEnumerable<DirectoryInfo> matchingDirs = dirInfoFiles.EnumerateDirectories("*.*", System.IO.SearchOption.AllDirectories)
.Where(d => !d.EnumerateFiles().Any(f => f.Extension.ToUpper() == ".TXT"
&& f.Name.EndsWith("abc", StringComparison.OrdinalIgnoreCase)));或者同样的,换句话说,可能更具可读性:
IEnumerable<DirectoryInfo> matchingDirs = dirInfoFiles
.EnumerateDirectories("*.*", System.IO.SearchOption.AllDirectories)
.Where(d => !d.EnumerateFiles("*abc.txt").Any());发布于 2013-06-25 07:21:43
这是我的观点。它返回第一个项目(或null),其中包含以您要查找的文本结尾的文件,并且不区分大小写。您可以删除lambda以使其更具可读性。
var directory = Directory.GetDirectories((paramStartFilePath, "*", SearchOption.AllDirectories)
.FirstOrDefault(x => new DirectoryInfo(x).EnumerateFiles().Any(f => !f.Name.EndsWith("abc.txt",true,CultureInfo.CurrentCulture))); https://stackoverflow.com/questions/17286253
复制相似问题