2012-09-12 4 views
2

J'ai créé un programme qui devrait afficher un arbre de système de fichiers. Je l'ai mis pour afficher le système de fichiers de C:. Lorsque je compile le programme dit que l'accès est refusé pour C:. Dites-moi ce dont vous auriez besoin au cas où vous m'aideriez et je vous fournirai les informations requises. Merci!Accès refusé pour "C: "

P.S. Lorsque j'ai défini le programme pour lister le système de fichiers dans C:\Windows\ cela a fonctionné.

C'est le code que je:

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

Dans le programme, ti appeler la méthode je:

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

Pouvez-vous afficher les parties pertinentes de votre code? –

+0

quelle version de windows? Quelle version de VS? Avez-vous essayé de courir en tant qu'administrateur? – Jason

+2

L'exécute-t-il avec Admin Priviledges (clic droit sur la sortie exe, Run as Admin) fonctionne-t-il? –

Répondre

2

Ce code sera exécuté sous le compte utilisateur qui l'exécute. En fonction des autorisations de ce compte, un System.UnauthorizedAccessException peut se produire pour certains répertoires, tels qu'un dossier de compte d'utilisateur ou la corbeille. Cela ne vous empêchera pas de naviguer à mi-chemin dans la structure de répertoires, mais empêchera ce compte de lire tous les répertoires à l'intérieur des dossiers protégés.

Vous pouvez écrire un code à l'aide pull the access control listdirectoryInfo.GetAccessControl()

Ou vous pourriez attraper le System.UnauthorizedAccessException. Alors votre code pourrait ressembler à ceci:

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