我想创建一个目录中所有文件的列表,除了隐藏的fies和目录中隐藏文件夹内的文件.我用过这种方法,
new DirectoryInfo(path).GetFiles("*.*", SearchOption.AllDirectories)
.Where(f => (f.Attributes & FileAttributes.Hidden) == 0)
Run Code Online (Sandbox Code Playgroud)
但上面的方法返回隐藏文件夹中的文件.有没有其他方法可以做到这一点,而无需递归迭代目录?
那是因为隐藏子文件夹中的文件没有被隐藏.要检查这一点,你必须递归地走到每个文件夹并检查文件夹属性.
功能示例:
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;
}
Run Code Online (Sandbox Code Playgroud)
如何使用:
var path = @"c:\temp\123";
var result = getNonHidden(new DirectoryInfo(path));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1842 次 |
| 最近记录: |