Moin moin
Mein Code hier bereitet mir einige Probleme. Das kopieren als solches funktioniert super. Das Problem ist das Abfangen von Fehlern.
Kopiere ich z.B. auf einen USB-Stick und ziehe den Stick während des kopieren ab, verlässt der Code nicht sofort die entsprechende Methode.
Siehe dazu den Auszug aus dem LogFile. Habe bis Bild Nummer 0011 kopieren lassen und dann den USB-Stick abgezogen.
Irgendwie komme ich leider nicht weiter.
Mein Code:
Spoiler anzeigen
Auszug aus dem LogFile:
Spoiler anzeigen
Mein Code hier bereitet mir einige Probleme. Das kopieren als solches funktioniert super. Das Problem ist das Abfangen von Fehlern.
Kopiere ich z.B. auf einen USB-Stick und ziehe den Stick während des kopieren ab, verlässt der Code nicht sofort die entsprechende Methode.
Siehe dazu den Auszug aus dem LogFile. Habe bis Bild Nummer 0011 kopieren lassen und dann den USB-Stick abgezogen.
Irgendwie komme ich leider nicht weiter.
Mein Code:
VB.NET-Quellcode
-
- Public Class FileCopier
- Public Event CopyProgressChanged As EventHandler(Of CopyProgressEventArgs)
- Public Event CopyCompleted As EventHandler(Of CopyCompletedEventArgs)
- Public Event CopyFailed As EventHandler(Of CopyFailedEventArgs)
- Private Property Copysuccess As Boolean = False ' Flag für den Kopierforgang
- Public Async Function CopyDirectoryAsync(sourceDir As String, targetDir As String) As Task
- Await Task.Run(Sub() CopyDirectory(sourceDir, targetDir))
- End Function
- Private Sub IsCopySuccess()
- If Copysuccess Then
- Dim message As String = $"Kopieren erfolgreich abgeschlossen."
- RaiseEvent CopyCompleted(Me, New CopyCompletedEventArgs(message))
- GlobalEventLogger.ExceptionToFile(message, ExStatus.Success)
- End If
- End Sub
- Private Sub CopyDirectory(sourceDir As String, targetDir As String)
- Try
- ' Zuerst das Quellverzeichnis überprüfen
- If Not CheckSourceDirectory(sourceDir) Then Return
- ' Dann das Zielverzeichnis erstellen oder überprüfen
- If Not CreateTargetDirectory(targetDir) Then Return
- ' Schließlich die Dateien und Unterverzeichnisse kopieren
- CopyFilesAndSubDirectories(sourceDir, targetDir)
- ' Wenn alles erfolgreich war
- Copysuccess = True
- Catch ex As Exception
- Copysuccess = False
- Dim message As String = $"Ein Fehler ist aufgetreten."
- RaiseEvent CopyFailed(Me, New CopyFailedEventArgs(message))
- GlobalEventLogger.ExceptionToFile($"{message}{Environment.NewLine}{ex.Message}", ExStatus.Failure)
- End Try
- End Sub
- Private Function CheckSourceDirectory(sourceDir As String) As Boolean
- Dim sourceDirectoryInfo As New DirectoryInfo(sourceDir)
- If Not sourceDirectoryInfo.Exists Then
- Dim message As String = $"Quellverzeichnis existiert nicht!"
- RaiseEvent CopyFailed(Me, New CopyFailedEventArgs(Message))
- GlobalEventLogger.ExceptionToFile(Message, ExStatus.Failure)
- Return False
- End If
- Return True
- End Function
- Private Function CreateTargetDirectory(targetDir As String) As Boolean
- Try
- Dim targetDirectoryInfo As DirectoryInfo = Directory.CreateDirectory(targetDir)
- Return True
- Catch ex As Exception
- Copysuccess = False
- Dim message As String = $"Fehler beim Erstellen des Zielverzeichnisses."
- RaiseEvent CopyFailed(Me, New CopyFailedEventArgs(Message))
- GlobalEventLogger.ExceptionToFile($"{Message}{Environment.NewLine}{ex.Message}", ExStatus.Failure)
- Return False
- End Try
- End Function
- Private Sub CopyFilesAndSubDirectories(sourceDir As String, targetDir As String)
- Dim sourceDirectoryInfo As New DirectoryInfo(sourceDir)
- For Each sourceFileOrDir As FileSystemInfo In sourceDirectoryInfo.GetFileSystemInfos()
- If (sourceFileOrDir.Attributes And FileAttributes.Hidden) <> FileAttributes.Hidden Then ' Überprüfung auf versteckte Dateien oder Ordner
- Dim formattedPath As String
- If TypeOf sourceFileOrDir Is FileInfo Then ' Wenn es sich um eine Datei handelt
- Dim sourceFile As FileInfo = DirectCast(sourceFileOrDir, FileInfo)
- formattedPath = Path.Combine(targetDir, sourceFile.Name)
- Dim directoryStructure As String() = formattedPath.Split("\"c)
- If directoryStructure.Length > 3 Then
- formattedPath = Path.Combine(directoryStructure(0), directoryStructure(1), "...", directoryStructure(directoryStructure.Length - 1))
- End If
- Dim targetFile As String = Path.Combine(targetDir, sourceFile.Name)
- Try
- sourceFile.CopyTo(targetFile, True)
- RaiseEvent CopyProgressChanged(Me, New CopyProgressEventArgs(formattedPath))
- Catch ex As Exception
- Copysuccess = False
- Dim message As String = $"Fehler beim Kopieren der Datei"
- RaiseEvent CopyFailed(Me, New CopyFailedEventArgs($"{message} {sourceFile.Name}{Environment.NewLine}{ex.Message}"))
- GlobalEventLogger.ExceptionToFile($"{message} {sourceFile.Name}{Environment.NewLine}{ex.Message}", ExStatus.Failure)
- Return ' Sofort verlassen, wenn ein Fehler auftritt
- End Try
- ElseIf TypeOf sourceFileOrDir Is DirectoryInfo Then ' Wenn es sich um ein Verzeichnis handelt
- Dim sourceSubDir As DirectoryInfo = DirectCast(sourceFileOrDir, DirectoryInfo)
- Dim targetSubDir As String = Path.Combine(targetDir, sourceSubDir.Name)
- CopyDirectory(sourceSubDir.FullName, targetSubDir)
- End If
- End If
- Next
- End Sub
- End Class
- Public Class CopyProgressEventArgs
- Inherits EventArgs
- Public Property FileName As String
- Public Sub New(fileName As String)
- Me.FileName = fileName
- End Sub
- End Class
- Public Class CopyCompletedEventArgs
- Inherits EventArgs
- Public Property Message As String
- Public Sub New(message As String)
- Me.Message = message
- End Sub
- End Class
- Public Class CopyFailedEventArgs
- Inherits EventArgs
- Public Property ErrorMessage As String
- Public Sub New(errorMessage As String)
- Me.ErrorMessage = errorMessage
- End Sub
- End Class
Auszug aus dem LogFile:
XML-Quellcode
-
- [ 03.05.2024 | 08:40:44 ] Erfolgreich
- Das Laden der Programm-Konfiguration aus der XML-Datei B:\Debug\Settings.xml war erfolgreich.
- [ 03.05.2024 | 08:40:46 ] Hinweis
- Der Backup-Prozess wurde gestartet.
- [ 03.05.2024 | 08:40:48 ] Fehler
- Fehler beim Kopieren der Datei NewAI_A_0012.png
- Die Datei "F:\_LibraryBackUp\testverzeichnisse\Bilder\NewAI_A_0012.png" konnte nicht gefunden werden.
- [ 03.05.2024 | 08:41:00 ] Fehler
- Fehler beim Erstellen des Zielverzeichnisses.
- Ein Teil des Pfades "F:\_LibraryBackUp\testverzeichnisse\Bilder_I" konnte nicht gefunden werden.
- [ 03.05.2024 | 08:41:01 ] Fehler
- Fehler beim Erstellen des Zielverzeichnisses.
- Ein Teil des Pfades "F:\_LibraryBackUp\testverzeichnisse\Bilder_II" konnte nicht gefunden werden.
- [ 03.05.2024 | 08:41:01 ] Fehler
- Fehler beim Erstellen des Zielverzeichnisses.
- Ein Teil des Pfades "F:\_LibraryBackUp\testverzeichnisse\Dakota" konnte nicht gefunden werden.
- [ 03.05.2024 | 08:41:02 ] Fehler
- Fehler beim Erstellen des Zielverzeichnisses.
- Ein Teil des Pfades "F:\_LibraryBackUp\testverzeichnisse\Storys" konnte nicht gefunden werden.
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.