获取除隐藏目录中的文件之外的所有文件?
Posted
技术标签:
【中文标题】获取除隐藏目录中的文件之外的所有文件?【英文标题】:Get all files except files in hidden directories? 【发布时间】:2015-08-14 16:58:45 【问题描述】:我想创建一个目录中所有文件的列表,除了目录中隐藏文件夹中的隐藏文件和文件。我用了这个方法,
new DirectoryInfo(path).GetFiles("*.*", SearchOption.AllDirectories)
.Where(f => (f.Attributes & FileAttributes.Hidden) == 0)
但上述方法返回隐藏文件夹内的文件。有没有其他方法可以在不递归遍历目录的情况下做到这一点?
【问题讨论】:
是否有可能有一个不隐藏在隐藏目录中的文件? 恐怕不要这么认为。虽然它可能不需要那么多代码。 @DimitarTsonev:是的。 C# - Get a list of files excluding those that are hidden的可能重复 【参考方案1】:那是因为隐藏子文件夹中的文件没有被隐藏。 要检查这一点,您必须递归地走到每个文件夹并检查文件夹属性。
示例函数:
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));
【讨论】:
【参考方案2】:没有“手动迭代”的一种方法如下:
var dirInfo = new DirectoryInfo(path);
var hiddenFolders = dirInfo.GetDirectories("*", SearchOption.AllDirectories)
.Where(d => (d.Attributes & FileAttributes.Hidden) != 0)
.Select(d => d.FullName);
var files = dirInfo.GetFiles("*.*", SearchOption.AllDirectories)
.Where(f => (f.Attributes & FileAttributes.Hidden) == 0 &&
!hiddenFolders.Any(d => f.FullName.StartsWith(d)));
但是这将迭代整个目录树两次,并且每个文件都有.Any
-overhead => 使用@Catburry 的解决方案,因为它具有更好的性能并且更易于维护 IMO。 ..
【讨论】:
【参考方案3】:试试这样:
foreach (DirectoryInfo Dir in Directory.GetDirectories(directorypath))
if (!Dir.Attributes.HasFlag(FileAttributes.Hidden))
【讨论】:
【参考方案4】:你能试试下面的代码吗:
var x = new DirectoryInfo(@"D://Priyank Sheth/Projects/").GetFiles("*.*", SearchOption.AllDirectories)
.Where(f => (f.Directory.Attributes & FileAttributes.Hidden) == 0 && (f.Attributes & FileAttributes.Hidden) == 0);
我没有尝试过,但如果它不起作用,请告诉我。
【讨论】:
以上是关于获取除隐藏目录中的文件之外的所有文件?的主要内容,如果未能解决你的问题,请参考以下文章