Hallo!
Ich arbeite gerade an einem Skript, das Dateien aus einem Quellverzeichnis in ein Work und zum Schluss in ein Zielverzeichnis kopiert. Die wichtigste Funktion in diesem Skript ist es, zu überprüfen, ob auch alle Dateien korrekt kopiert wurden (für den Fall, dass auf dem Weg etwas verloren ging).
Jeder Schritt wird in einer Logdatei festgehalten.
Die Funktion bekommt ein Array (mit FileFindNextFile erstellt) mit den Dateien aus dem Quellverzeichnis und dann vergleiche ich einzeln die Dateinamen mit denen im Zielverzeichnis. Weil beide "Listen" mit FileFindNextFile erstellt wurden, sollte die Reihenfolge passen.
Beim Testen funktioniert es aber nicht so recht... Wenn ich eine Datei aus der Quelle oder dem Ziel lösche, erkennt die Funktion das nicht und schreibt weiterhin in das Log, dass die Datei korrekt kopiert wurde.
Hier einmal die Funktion:
Spoiler anzeigen
Func dateien_vergleichen(ByRef $liste, $zielpfad, $filter, $datum)
Local $suchmuster, $naechste_datei, $zaehler, $fehler
FileWriteLine($log, " ")
FileWriteLine($log, "Überprüfen: ")
$suchmuster = FileFindFirstFile($zielpfad & $filter)
; Sleep(20000)
For $zaehler = 0 To UBound($liste) -1
$naechste_datei = FileFindNextFile($suchmuster)
if @error Then
FileWriteLine($log, "Programmende! Zu wenige Dateien für die Überprüfung im Verzeichnis " & $zielpfad & " gefunden.")
$fehler = FileOpen("O:\test\Log\Fehler.txt", 1)
FileWriteLine($fehler, $datum)
FileWriteLine($fehler, "Programmende! Zu wenige Dateien für die Überprüfung im Verzeichnis " & $zielpfad & " gefunden.")
FileClose($fehler)
FileClose($suchmuster)
Exit
EndIf
If $naechste_datei = $liste[$zaehler] Then
FileWriteLine($log, $liste[$zaehler] & " ist korrekt kopiert worden.")
Else
FileWriteLine($log, "Programmende! Die Dateinamen" & $liste[$zaehler] & " und " & $naechste_datei & " stimmen nicht überein!")
$fehler = FileOpen("O:\test\Log\Fehler.txt", 1)
FileWriteLine($fehler, $datum)
FileWriteLine($fehler, "Programmende! Die Dateinamen" & $liste[$zaehler] & " und " & $naechste_datei & " stimmen nicht überein!")
FileClose($fehler)
FileClose($suchmuster)
Exit
EndIf
Next
FileClose($suchmuster)
EndFunc
Könnte das mit einem FileExits besser funktionieren? Oder hat jemand eine andere Idee?