【解決方法】Directoryinfo は隠しフォルダーを除外します


WPFを使用してフォトビューアアプリを作成しています。
UI では、左側のペインにドライブとフォルダーがリストされます。 treeview; 右側のペインには、選択したフォルダー内のすべての写真がリストされます。 treeview

ループしてアイテムをフォルダーに追加するとき ツリー表示、隠しフォルダーやアクセスできないフォルダーを除外するにはどうすればよいですか?

現在のコードは次のとおりです。

C#
private void LoadDrives()
{
    DriveInfo[] allDrives = DriveInfo.GetDrives();

    foreach (DriveInfo drive in allDrives)
    {
        if (drive.DriveType == DriveType.Fixed || 
                  drive.DriveType == DriveType.Removable)
        {
            var drivetvItem = new TreeViewItem();
            drivetvItem.Header = drive.Name;
            drivetvItem.Tag = drive.Name;

            LoadParentFolders(drive.Name, drivetvItem);

            CanvasFolderBrowser.Items.Add(drivetvItem);
        }
    }
}

private TreeViewItem LoadParentFolders(string drive, TreeViewItem drivetvItem)
{
    DirectoryInfo dirInfo = new DirectoryInfo(drive);
    DirectoryInfo[] dirInfoList = dirInfo.GetDirectories();

    foreach (DirectoryInfo dir in dirInfoList)
    {
        var directorytvItem = new TreeViewItem();
        directorytvItem.Header = dir.Name;
        directorytvItem.Tag = dir.FullName;

        LoadChildFolders(dir.FullName, directorytvItem);

        drivetvItem.Items.Add(directorytvItem);
    }

    return drivetvItem;
}

private TreeViewItem LoadChildFolders
(string parentfolder, TreeViewItem directorytvItem)
{
    DirectoryInfo dirInfo = new DirectoryInfo(parentfolder);
    DirectoryInfo[] dirInfoList = dirInfo.GetDirectories();

    foreach (DirectoryInfo dir in dirInfoList)
    {
        var subdirectorytvItem = new TreeViewItem();
        subdirectorytvItem.Header = dir.Name;
        subdirectorytvItem.Tag = dir.FullName;

        LoadChildFolders(dir.FullName, subdirectorytvItem);

        directorytvItem.Items.Add(subdirectorytvItem);
    }

    return directorytvItem;
}

私が試したこと:

知っている fileinfo 持っています GetAttributes 方法。 似たようなものは見つかりません directoryinfo

解決策 1

FileSystemInfos の詳細は、ファイルだけでなくディレクトリに対しても機能します。を参照してください。 DirectoryInfo.GetFileSystemInfos メソッド (System.IO) Microsoft Learn[^]。

解決策 2

両方 DirectoryInfo そして FileInfo から継承する FileSystemInfoを提供します。 Attributes 財産[^]。

注意: どちらのクラスにもありません GetAttributes 方法。 おそらくあなたは次のことを考えています File.GetAttributes[^]、ファイルまたはディレクトリに対して機能します。 ただし、これは文字列として表現されたパスでは機能しますが、 FileInfo / DirectoryInfo インスタンス。

注意2: 属性は、ファイルまたはディレクトリにアクセスできるかどうかに関する情報の一部にすぎません。 たとえば、NTFS ドライブでは、 DACL[^] 現在のユーザーがオブジェクトにアクセスできない可能性があります。

コメント

タイトルとURLをコピーしました