GetDirectories-Fehler

04/09/2007 - 10:59 von Werner Strewe | Report spam
hallo ng,
es gibt verzeichnisse, auf die man keinen zugriff hat. jetzt möchte ich aber
alle unterzeichniise von d:\ holen mit
Dim NewDirs() As String = GetDirectories("d:\", "*",
IO.SearchOption.AllDirectories)

wie kann man verhindern, daß dann der fehler
Der Zugriff auf den Pfad d:\System Volume Information wurde verweigert.
kommt ?

danke
grüße von werner
 

Lesen sie die antworten

#1 Peter Götz
04/09/2007 - 14:54 | Warnen spam
Hallo Werner

es gibt verzeichnisse, auf die man keinen zugriff hat.



Definiere mal "man".
Bestimmte Benutzer haben nicht auf alle Verzeichnisse
uneingeschrànkte Zugriffsrechte. Beim Adminsitrator
sieht das etwas anders aus.

jetzt möchte ich aber
alle unterzeichniise von d:\ holen mit
Dim NewDirs() As String = GetDirectories("d:\", "*",
IO.SearchOption.AllDirectories)



Da Du mit IO.SearchOpton.AllDirectories auch erst
mal nicht bekannte Unterverzeichnisse einbeziehst,
musst Du natürlich damit rechnen, dass Dein Code,
wenn er unter einer normalen Benutzerkennung, mit
eingeschrànkten Rechten làuft irgendwann mal eine
Exception auslöst.

wie kann man verhindern, daß dann der fehler
Der Zugriff auf den Pfad d:\System Volume
Information wurde verweigert.
kommt ?



Wenn der jeweilige Benutzer nicht entsprechend
ausreichende Rechte hat um alle Verzeichnisse zu öffnen,
kannst Du das überhaupt nicht verhindern. Du kannst
aber einen solchen evtl. auftretenden Fehler in Deinem
Code behandeln.

Hier mal ein nur mal eben so schnell hingeschriebenes
Beispiel:

Imports System.Collections.ObjectModel
Public Class Form1

' /// Beginn Code
' Liste der Verzeichnisse die sich öffnen lassen
Private mDirectories As New List(Of String)

' Liste der Verzeichnisse die sich wg. mangelnder
' Rechte nicht öffnen lassen.
Private mRestricted As New List(Of String)

Private Sub Form1_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Click

FindDirs("C:\")

MsgBox("Directories: " & _
mDirectories.Count.ToString & _
ControlChars.CrLf & _
"Restricted: " & _
mRestricted.Count.ToString)
End Sub

Private Sub FindDirs(ByVal Path As String)
Dim Dirs As New _
ReadOnlyCollection(Of String) _
(New List(Of String))

Try
Dirs = My.Computer.FileSystem.GetDirectories _
(Path, _
FileIO.SearchOption.SearchTopLevelOnly)

For Each Item As String In Dirs
' ... die guten ins Töpfchen
mDirectories.Add(Item)
FindDirs(Item)
Next
Catch Ex As Exception
' ... schlechten ins
mRestricted.Add(Path)
End Try
End Sub
End Class
' \\\ E N T E

Das Beispiel erfasst erst mal nur die oberste Ebene
der Verzeichnisse und geht von dort aus Schritt für
Schritt weiter in die Tiefe.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen