【问题标题】:DirectoryInfo().GetFileSystemInfos() - how to avoid hidden folders?DirectoryInfo().GetFileSystemInfos() - 如何避免隐藏文件夹?
【发布时间】:2012-11-07 03:33:08
【问题描述】:

如果我这样做:

var entries = new DirectoryInfo(@"C:\Folder1")
                   .GetFileSystemInfos("test*", SearchOption.AllDirectories);

当我有这样的文件夹结构时,“HiddenFolder”被隐藏但“test.txt”文件没有被隐藏:

C:\Folder1\
C:\Folder1\HiddenFolder\
C:\Folder1\HiddenFolder\test.txt

那我怎样才能不获取“test.txt”文件呢?

(您可能认为 GetFileSystemInfos 会跳过隐藏文件夹,但事实并非如此。)

这里是部分解决方案

此代码去除隐藏文件和文件夹,但不处理隐藏文件夹中的非隐藏文件!

  var includeLocalFolderNames = true; // to include folder names in the list

  var hiddenFolders = new List<FileSystemInfo>();
  return entries
    .Where(entry =>
      {
        // skip if this entry is hidden, or it is in a hidden folder

        var isHidden = (entry.Attributes & FileAttributes.Hidden) != 0;
        if (isHidden)
        {
          hiddenFolders.Add(entry);
          return false;
        }
        return !hiddenFolders.Any(fsi => entry.FullName.StartsWith(fsi.FullName));
      })
    .Where(entry =>
      {
        // include folder names if requested...

        if (includeLocalFolderNames) return true;
        return (entry.Attributes & FileAttributes.Directory) == 0;
      })
    .Select(entry => {
        // do something...
        return entry.Name;
      });

【问题讨论】:

    标签: c# filesysteminfo


    【解决方案1】:

    当然不是最佳和/或优雅的解决方案。

    var root = new DirectoryInfo(path);
    var nonHiddenDirectories =
        root.GetDirectories("*", SearchOption.AllDirectories).Where(
            d => (d.Attributes & FileAttributes.Hidden) == 0).ToArray();
    var nonHiddenFiles =
        nonHiddenDirectories.SelectMany(d => d.GetFiles()).Where(
            f => (f.Attributes & FileAttributes.Hidden) == 0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      • 2013-06-07
      • 2016-07-09
      • 2016-07-14
      • 1970-01-01
      • 2011-08-02
      相关资源
      最近更新 更多