LINQ查询中无法访问的表达式代码

时间:2014-04-30 17:38:04

标签: 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")));

我尝试使用this question的接受答案作为起点。在Visual Studio(2013 Express Desktop,如果它很重要)中,我在第7到第9行显示绿色下划线,不包括certan子目录,并将结果限制为.txt文件,告诉我Unreachable expression code detected。但是,包含.csv文件的行似乎没问题。执行查询不会返回任何结果,也不会抛出任何异常。

我对LINQ仍然非常非常新,所以请原谅我,如果这里的问题显而易见。任何人都可以对此有所了解吗?或者也许有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:7)

FileAttributes.Hidden == 0 &&
FileAttributes.System == 0 &&
FileAttributes.Temporary == 0 &&

这是测试枚举值是否= = 0,而不是文件具有该属性。您需要创建System.IO.FileInfo的实例才能使用FileInfo.Attributes。您可以使用.Select(f => new System.IO.FileInfo(f))