【发布时间】:2016-01-05 11:51:56
【问题描述】:
我正在枚举目录中的所有文件,以便以后处理它们。我想排除隐藏文件和系统文件。
这是我目前所拥有的:
IEnumerable<IGrouping<string, string>> 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
}
}
我发现 this question 有一个来自 Jerome 的类似示例,但我什至无法编译。
我做错了什么?
【问题讨论】:
-
FileAttributes.Hidden & FileAttributes.System始终等于 0。 -
哦,我没有意识到这一点。我尝试了
(new FileInfo(f).Attributes & FileAttributes.Hidden) != FileAttributes.Hidden),它有效,但我也很难弄清楚如何在其中包含系统文件。 -
此外,如果您要创建一个新的 FileInfo,请从 DirectoryInfo 开始,这样您就可以从一开始就获得 FileInfo 对象。至于过滤器,试试
fi.Attributes & (FileAttributes.Hidden | FileAttributes.System)) == 0。首先创建你想要的掩码FileAttributes.Hidden | FileAttributes.System,然后然后进行按位与。文件夹路径也可通过FileInfo.DirectoryName
标签: c# ienumerable fileinfo