Re: Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie

Tech-Archive recommends: Speed Up your PC by fixing your registry



"Stefan Kahlert" schrieb
Hallo zusammen,
hab ein Skript welches einen Ordner samt Unterordner auflistet.
Funktioniert soweit auch gut.
Das Problem ist nur, falls das Skript auf einen Ordner "trifft" auf den es keinen Zugriff hat,
bricht bricht es ab. Soweit ach logisch :-)
Jetzt möchte ich gerne das das Skript einfach mit dem nächsten Ordner fortfährt.
Bin mit der rekursion im Detail nicht vertraut.

Ich kann mit zwar den Fehler und das Verzeichnis anzeigen lassen an dem der Zugriff scheiterte.
Der Hintergrund ist wir haben zig Tausende "Altdaten" in unzähligen unterordnern.
Jetzt möchte ich natürlich nicht in jeden Ordner nachschauen ob Berechtigungen bestehen.
Eine Liste mit Ordnern auf die der Zugriff verweigert wurde wäre Hilfreich.

Besten Dank für Eure Tips


PS. Es tritt der Fehler 70 auf "Zuigriff verweigert"

Mfg

Stefan Kahlert


hier mal der Code

[...]
---------------------------------------------------------------------------------

Hallo Stefan,

hie ist ein Code, der Deine Erwartungen erfüllen sollte:
'--- Code Beginn ---
Option Explicit

Dim oFso 'FileSystemObject
Dim sStartPath 'nimmt Startpfad auf
Dim sLogFile 'nimmt Pfad und Name der Logdatei auf
Dim oTxtStm 'Textstreamobject der Logdatei

sStartPath = "c:\Temp"
sLogFile = "C:\logfile.txt"

Set oFso = CreateObject("Scripting.FileSystemObject")
Set oTxtStm = oFso.OpenTextFile(sLogFile, 2, True)

oTxtStm.WriteLine "--- Beginn, " & Now & " ---"

If oFso.FolderExists(sStartPath) Then
Call ReadFolder(sStartPath)
Else
oTxtStm.WriteLine "Keine Dateien gefunden"
End If

oTxtStm.WriteLine "--- Ende, " & Now & " ---"
oTxtStm.Close

Set oFso = Nothing
Set oTxtStm = Nothing
MsgBox "Fertig, Logdatei wurde gespeichert unter: " & vbNewLine & sLogFile

Sub ReadFolder(sPath)
Dim oFld 'nimmt das Ordnerobjekt (Folder) auf
Dim oF 'nimmt das Dateiobjekt (File) auf
Dim nFCount, nErrNum

On Error Resume Next
'hier wird Fehler 70 ausgelöst, falls kein Zugriff besteht
'Ohne Zugriff ist ein Auflisten der Files natürlich nicht möglich
nFCount = oFso.GetFolder(sPath).Files.Count
nErrNum = Err.Number
Err.Clear
On Error GoTo 0

If nErrNum = 0 Then
'Logeintrag für aktuellen Ordner mit Anzahl der Dateien, falls erwünscht
oTxtStm.WriteLine "Ordner: " & sPath & " - Anz: " & nFCount

For Each oF In oFso.GetFolder(sPath).Files
'Pfad der Datei in Logfile schreiben
oTxtStm.WriteLine Chr(9) & oF.Path
'... hier evtl. Anweisungen zum Manipulieren der Dateien
Next

'rekursiv die Subfolders aufrufen
For Each oFld In oFso.GetFolder(sPath).SubFolders
Call ReadFolder(oFld.Path)
Next

ElseIf nErrNum = 70 Then
'Logeintrag bei Fehler 70, falls erwünscht
oTxtStm.WriteLine "*** Fehler: " & sPath & " - Zugriff verweigert -"
Else
'Logeintrag bei sonst. Fehler, falls erwünscht
oTxtStm.WriteLine "*** Fehler: " & sPath & " - Fehlernummer: " & Err.Number & " -"
End If
End Sub

'--- Code Ende ---

Viele Grüße
Stefan Baumgart


.



Relevant Pages