2

私がこれを行う場合:

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

1 に答える 1

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);
于 2012-11-07T03:54:33.917 に答える