2

ファイルシステムツリーを表示するプログラムを作成しました。からファイルシステムを表示するように設定しましたC:。プログラムをコンパイルすると、 に対するアクセスが拒否されたと表示されC:ます。あなたが私を助ける場合に必要なものを教えてください。必要な情報を提供します. ありがとう!

PSファイルシステムをリストするようにプログラムを設定すると、C:\Windows\機能しました。

これは私が使用したコードです:

private void ListDirectory(TreeView treeView, string path)
{
    treeView.Nodes.Clear();
    var rootDirectoryInfo = new DirectoryInfo(path);
    treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo));
}

private static TreeNodeCreateDirectoryNode(DirectoryInfo directoryInfo)
{
    var directoryNode = new TreeNode(directoryInfo.Name);
    foreach (var directory in directoryInfo.GetDirectories())
        directoryNode.Nodes.Add(CreateDirectoryNode(directory));
    foreach (var file in directoryInfo.GetFiles())
        directoryNode.Nodes.Add(new TreeNode(file.Name));
    return directoryNode;
}

プログラムでは、使用したメソッドを呼び出します。

mainWindow(){
    InitialiseComponent();
    ListDirectory(treeView1, @"C:\");
}
4

1 に答える 1

2

このコードは、それを実行しているユーザー アカウントで実行されます。そのアカウントのアクセス許可に基づいてSystem.UnauthorizedAccessException、ユーザー アカウント フォルダーやごみ箱などの一部のディレクトリに対して a が発生する場合があります。

これにより、ディレクトリ構造の途中まで移動できなくなるわけではありませんが、そのアカウントが保護されたフォルダー内のすべてのディレクトリを読み取ることができなくなります。

を使用してアクセス制御リストをプルするコードを書くことができますdirectoryInfo.GetAccessControl()

または、 をキャッチできますSystem.UnauthorizedAccessException。次に、コードは次のようになります。

try
{
    var directoryNode = new TreeNode( directoryInfo.Name );
    foreach ( var directory in directoryInfo.GetDirectories() )
        directoryNode.Nodes.Add( CreateDirectoryNode( directory ) );
    foreach ( var file in directoryInfo.GetFiles() )
        directoryNode.Nodes.Add( new TreeNode( file.Name ) );
    return directoryNode;
}
catch ( System.UnauthorizedAccessException )
{
    return new TreeNode( "Unavailable Node" );
}
catch ( System.IO.PathTooLongException )
{
    return new TreeNode( "Unavailable Node" );
}
于 2015-04-01T12:50:43.057 に答える