我想创建一个目录中所有文件的列表,除了隐藏文件和目录中隐藏文件夹中的文件。我用了这个方法,
new DirectoryInfo(path).GetFiles("*.*", SearchOption.AllDirectories)
.Where(f => (f.Attributes & FileAttributes.Hidden) == 0)
但是上述方法返回隐藏文件夹中的文件。有没有其他方法可以在不递归遍历目录的情况下执行此操作?
最佳答案
那是因为隐藏子文件夹中的文件没有被隐藏。 要检查这一点,您必须递归地走到每个文件夹并检查文件夹属性。
示例函数:
private static IList<FileInfo> getNonHidden(DirectoryInfo baseDirectory)
{
var fileInfos = new List<System.IO.FileInfo>();
fileInfos.AddRange(baseDirectory.GetFiles("*.*", SearchOption.TopDirectoryOnly).Where(w => (w.Attributes & FileAttributes.Hidden) == 0));
foreach (var directory in baseDirectory.GetDirectories("*.*", SearchOption.TopDirectoryOnly).Where(w => (w.Attributes & FileAttributes.Hidden) == 0))
fileInfos.AddRange(getNonHiddenFiles(directory));
return fileInfos;
}
使用方法:
var path = @"c:\temp\123";
var result = getNonHidden(new DirectoryInfo(path));
关于c# - 获取除隐藏目录中的文件之外的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570023/