获取隐藏目录中的文件以外的所有文件?

时间:2015-06-01 09:32:02

标签: c#

我想创建一个目录中所有文件的列表,除了隐藏的fies和目录中隐藏文件夹中的文件。我用过这种方法,

inkGrid0

但是上面的方法会在隐藏文件夹中返回文件。如果没有递归迭代目录,还有其他方法吗?

4 个答案:

答案 0 :(得分:6)

这是因为隐藏子文件夹中的文件未被隐藏。 要检查这一点,你必须递归地走到每个文件夹&检查文件夹属性。

示例功能:

   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));

答案 1 :(得分:1)

试试这样:

foreach (DirectoryInfo Dir in Directory.GetDirectories(directorypath))
{
    if (!Dir.Attributes.HasFlag(FileAttributes.Hidden))
    {

    }
}

答案 2 :(得分:1)

没有&#34;手动迭代的一种方式&#34;将是以下内容:

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 - 每个文件的开销=&gt;使用@ Catburry的解决方案,因为它具有更好的性能并且更容易维护IMO ...

答案 3 :(得分:-1)

您可以尝试下面的代码:

var x = new DirectoryInfo(@"D://Priyank Sheth/Projects/").GetFiles("*.*", SearchOption.AllDirectories)
                     .Where(f => (f.Directory.Attributes & FileAttributes.Hidden) == 0 && (f.Attributes & FileAttributes.Hidden) == 0);

我没有尝试过,但如果它不起作用,请告诉我。