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

标签 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 还是非常非常陌生,所以如果这里的问题非常明显,请原谅我。任何人都可以阐明这一点吗?或者也许有更好的方法来解决这个问题?

最佳答案

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/

相关文章:

c# - 开源 .net/C# 项目和框架?

c# - Linq To 实体按加入中的最大日期分组

assembly - 转换 FAT 表(FAT12 文件系统)中存储的簇号以从软盘读取

linux - (FUSE) 文件系统何时检查访问权限?

c# - 如何调试DLL里面的代码

c# - 链接 IEnumerable<T> 扩展方法的首选(性能和可读性)方式是什么?

c# - 过时的属性不会在 VS2010 中引起任何编译器警告

c# - 将多维集合转换为带分隔符的字符串

c# - (obj != null) 不起作用

c - 在 C 中使用 fts_children() 的意外结果