Ale*_* A. 2 c# linq filesystems file-attributes
我正在尝试使用LINQ构建并行查询,以获取特定目录及其子目录中的所有文本文件和一个CSV文件.我希望排除隐藏,临时和系统文件,甚至被查询考虑,以期加快速度.(目录很大.)虽然我在这里,但我也想排除几个子目录.这是我的代码:
ParallelQuery<string> getFiles =
Directory.EnumerateFiles(@"C:\", "*", SearchOption.AllDirectories)
.AsParallel().Where(f => (
FileAttributes.Hidden == 0 &&
FileAttributes.System == 0 &&
FileAttributes.Temporary == 0 &&
!Path.GetDirectoryName(f).Contains("TempDir") &&
!Path.GetDirectoryName(f).Contains("OtherDir") &&
(Path.GetExtension(f).ToUpper() == ".TXT" ||
Path.GetFileName(f) == "GoodFile.csv")));
Run Code Online (Sandbox Code Playgroud)
我试着用这个问题的接受答案作为起点.在Visual Studio(2013 Express Desktop,如果它很重要)中,我在第7到第9行显示绿色下划线,不包括certan子目录,并将结果限制为.txt文件,告诉我Unreachable expression code detected.但是,包含.csv文件的行似乎没问题.执行查询不返回任何结果,也不会抛出任何异常.
我对LINQ仍然是非常非常新的所以请原谅我,如果这里的问题明显是显而易见的.任何人都可以对此有所了解吗?或许有更好的方法来解决这个问题?
FileAttributes.Hidden == 0 &&
FileAttributes.System == 0 &&
FileAttributes.Temporary == 0 &&
Run Code Online (Sandbox Code Playgroud)
这是测试枚举值是== 0,而不是文件具有该属性.您需要创建System.IO.FileInfo要使用的实例FileInfo.Attributes.你可以用.Select(f => new System.IO.FileInfo(f))它.