当前位置:  开发笔记 > 编程语言 > 正文

如何使用Directory.EnumerateFiles,不包括隐藏文件和系统文件

如何解决《如何使用Directory.EnumerateFiles,不包括隐藏文件和系统文件》经验,为你挑选了1个好方法。

我正在枚举目录中的所有文件,以便稍后处理它们.我想排除隐藏和系统文件.

这是我到目前为止:

IEnumerable> files;

files = Directory.EnumerateFiles(sourcePath, "*", SearchOption.AllDirectories)
       .Where(f => (new FileInfo(f).Attributes & FileAttributes.Hidden & FileAttributes.System) == 0)
       .GroupBy(Path.GetDirectoryName);

但是,如果我查看结果,我仍然会隐藏并包含系统文件:

foreach (var folder in files)
{
    foreach (var file in folder)
    {
        // value for file here still shows hidden/system file paths
    }
}

我发现这个问题与杰罗姆有类似的例子,但我甚至无法编译.

我究竟做错了什么?



1> poke..:
.Where(f => (new FileInfo(f).Attributes & FileAttributes.Hidden & FileAttributes.System) == 0)

由于FileAttributes值是标志,它们在位级别上是分离的,因此您可以正确地组合它们.因此,FileAttributes.Hidden & FileAttributes.System永远都是0.所以你基本上检查以下内容:

(new FileInfo(f).Attributes & 0) == 0

这将永远是真实的,因为您正在删除& 0零件的任何值.

您要检查的是文件是否既没有这些标志,换句话说,如果没有两个组合的公共标志:

.Where(f => (new FileInfo(f).Attributes & (FileAttributes.Hidden | FileAttributes.System)) == 0)

你也可以使用它Enum.HasFlag来使这个更容易理解:

.Where(f => !new FileInfo(f).Attributes.HasFlag(FileAttributes.Hidden | FileAttributes.System))

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有