Re: Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie
- From: "Stefan Baumgart" <xyz@xxxxxxxxxxx>
- Date: Thu, 6 Mar 2008 11:26:57 +0100
"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
.
- Follow-Ups:
- Re: Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie
- From: Stefan Kahlert
- Re: Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie
- References:
- Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie
- From: Stefan Kahlert
- Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie
- Prev by Date: Re: Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie
- Next by Date: Re: Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie
- Previous by thread: Re: Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie
- Next by thread: Re: Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie
- Index(es):
Relevant Pages
|