我正在尝试使用 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")));
我尝试使用已接受的答案 this question作为起点。在 Visual Studio(2013 Express Desktop,如果重要的话)中,我在第 7-9 行看到绿色下划线,这些行排除了 certan 子目录并将结果限制为 .txt 文件,告诉我 Unreachable expression code detected
。但是,包含 .csv 文件的行似乎没问题。执行查询不会返回任何结果,也不会抛出任何异常。
我对 LINQ 还是非常非常陌生,所以如果这里的问题非常明显,请原谅我。任何人都可以阐明这一点吗?或者也许有更好的方法来解决这个问题?
最佳答案
FileAttributes.Hidden == 0 &&
FileAttributes.System == 0 &&
FileAttributes.Temporary == 0 &&
这是在测试枚举值是否为 == 0,而不是文件是否具有该属性。您需要创建 System.IO.FileInfo
的实例才能使用 FileInfo.Attributes
。您可以为此使用 .Select(f => new System.IO.FileInfo(f))
。
关于c# - LINQ 查询中无法访问的表达式代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23394622/