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

Sam*_*gha 2 c#

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

new DirectoryInfo(path).GetFiles("*.*", SearchOption.AllDirectories)
                     .Where(f => (f.Attributes & FileAttributes.Hidden) == 0)
Run Code Online (Sandbox Code Playgroud)

但上面的方法返回隐藏文件夹中的文件.有没有其他方法可以做到这一点,而无需递归迭代目录?

Cad*_*rry 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;
    }
Run Code Online (Sandbox Code Playgroud)

如何使用:

  var path = @"c:\temp\123";
  var result = getNonHidden(new DirectoryInfo(path));
Run Code Online (Sandbox Code Playgroud)