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某些目录(例如用户帐户文件夹或回收站)可能会出现。

这不会阻止您在目录结构中导航,但会阻止该帐户读取受保护文件夹内的所有目录。

您可以编写代码来使用拉取访问控制列表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 回答