Moin,
da ich gerade an einem Updater bin, benötigte ich eine Funktion zum rekursiven Kopieren von Dateien. Ich denke auch manch anderer wird sie gut gebrauchen können.
Optional kann man zudem ein Modus angeben welche Dateien in das Zielverzeichnis kopiert werden sollen.
OverwritesAll = Alle überschreiben
OnlyNewFiles = Nur wenn die Datei am Zielort noch nicht existiert
OverwriteNewDate = Nur wenn die Datei vom Quellort ein aktuelleres Datum hat als die Datei am Zielort
Zudem verfügt sie über ein Event, welches ausgeführt wird, nachdem ein Verzeichnis erstell oder eine Datei kopiert wurde.
Hierbei kann man direkt den aktuellen Status ausgeben lassen. Jedoch werden die Logs auch in eine Liste geschrieben und wird als Rückgabe der Funktion zurückgegeben.
clsFilesystem.vb
Spoiler anzeigen
Anwendungsbeispiel:
Benötigt wird eine Windows Forms Anwendung, eine Textbox und ein Button.
Spoiler anzeigen
ohne Event
Spoiler anzeigen
da ich gerade an einem Updater bin, benötigte ich eine Funktion zum rekursiven Kopieren von Dateien. Ich denke auch manch anderer wird sie gut gebrauchen können.
Optional kann man zudem ein Modus angeben welche Dateien in das Zielverzeichnis kopiert werden sollen.
OverwritesAll = Alle überschreiben
OnlyNewFiles = Nur wenn die Datei am Zielort noch nicht existiert
OverwriteNewDate = Nur wenn die Datei vom Quellort ein aktuelleres Datum hat als die Datei am Zielort
Zudem verfügt sie über ein Event, welches ausgeführt wird, nachdem ein Verzeichnis erstell oder eine Datei kopiert wurde.
Hierbei kann man direkt den aktuellen Status ausgeben lassen. Jedoch werden die Logs auch in eine Liste geschrieben und wird als Rückgabe der Funktion zurückgegeben.
clsFilesystem.vb
VB.NET-Quellcode
- Imports System.IO
- Public Class Filesystem
- Private Report As New List(Of CopyReport)
- Public Event Update(ByVal Report As CopyReport)
- Public Enum CopyMode
- OverwritesAll = 0
- OverwriteNewDate = 1
- OnlyNewFiles = 2
- End Enum
- Public Function CopyRecursive(ByVal SourcePath As String, ByVal DestinationPath As String) As List(Of CopyReport)
- Return CopyRecursiveMethode(SourcePath, DestinationPath, CopyMode.OverwritesAll)
- End Function
- Public Function CopyRecursive(ByVal SourcePath As String, ByVal DestinationPath As String, ByVal Mode As CopyMode) As List(Of CopyReport)
- Return CopyRecursiveMethode(SourcePath, DestinationPath, Mode)
- End Function
- Private Function CopyRecursiveMethode(ByVal SourcePath As String, ByVal DestinationPath As String, ByVal CopyMode As CopyMode) As List(Of CopyReport)
- Dim DirInfo As New DirectoryInfo(SourcePath)
- Dim Directories As List(Of DirectoryInfo) = DirInfo.GetDirectories.ToList
- Dim Files As List(Of FileInfo) = DirInfo.GetFiles.ToList
- For Each oDir As DirectoryInfo In Directories
- Dim NewDestinationPath As String = Path.Combine(DestinationPath, oDir.Name)
- Dim ReportClass As New CopyReport
- If Not Directory.Exists(NewDestinationPath) Then
- Directory.CreateDirectory(NewDestinationPath)
- ReportClass.Status = CopyReport.FileStatus.CreateDir
- ReportClass.Message = NewDestinationPath
- Report.Add(ReportClass)
- RaiseEvent Update(ReportClass)
- End If
- CopyRecursiveMethode(oDir.FullName, NewDestinationPath, CopyMode)
- Next
- For Each oFile As FileInfo In Files
- Dim ReportClass As New CopyReport
- Dim NewFilename As String = Path.Combine(DestinationPath, oFile.Name)
- Dim Overwrite As Boolean = False
- Dim CopyFile As Boolean = False
- Select Case CopyMode
- Case Filesystem.CopyMode.OverwritesAll
- Overwrite = True
- CopyFile = True
- ReportClass.Status = CopyReport.FileStatus.Copy
- Case Filesystem.CopyMode.OnlyNewFiles
- If Not File.Exists(NewFilename) Then
- CopyFile = True
- ReportClass.Status = CopyReport.FileStatus.Copy
- End If
- Case Filesystem.CopyMode.OverwriteNewDate
- If File.Exists(NewFilename) Then
- If FileDateTime(oFile.FullName) > FileDateTime(NewFilename) Then
- Overwrite = True
- CopyFile = True
- ReportClass.Status = CopyReport.FileStatus.Update
- End If
- Else
- Overwrite = True
- CopyFile = True
- ReportClass.Status = CopyReport.FileStatus.Copy
- End If
- End Select
- Try
- If CopyFile Then
- File.Copy(oFile.FullName, NewFilename, Overwrite)
- ReportClass.Message = NewFilename
- End If
- Catch ex As Exception
- ReportClass.Status = CopyReport.FileStatus.CopyError
- ReportClass.Message = ex.Message & "[" & NewFilename & "]"
- End Try
- If Not ReportClass.Message = "" Then
- Report.Add(ReportClass)
- RaiseEvent Update(ReportClass)
- End If
- Next
- Return Report
- End Function
- End Class
- Public Class CopyReport
- Public Enum FileStatus
- Copy = 0
- Update = 1
- CreateDir = 2
- CopyError = 3
- End Enum
- Public Status As FileStatus
- Public Message As String
- End Class
Anwendungsbeispiel:
Benötigt wird eine Windows Forms Anwendung, eine Textbox und ein Button.
VB.NET-Quellcode
- Public Class Form1
- Private WithEvents Filesystem As New Filesystem
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Filesystem.CopyRecursive("C:\temp\vb.net\source", "C:\temp\vb.net\destination", FilesystemClass.Filesystem.CopyMode.OverwriteNewDate)
- End Sub
- Private Sub Filesystem_Update(ByVal Report As CopyReport) Handles Filesystem.Update
- Select Case Report.Status
- Case CopyReport.FileStatus.Copy
- TextBox1.Text &= "*Kopiere: "
- Case CopyReport.FileStatus.Update
- TextBox1.Text &= "*Update: "
- Case CopyReport.FileStatus.CreateDir
- TextBox1.Text &= "*Verzeichnis: "
- Case CopyReport.FileStatus.CopyError
- TextBox1.Text &= "**Fehler: "
- End Select
- TextBox1.Text &= Report.Message & vbNewLine
- End Sub
- End Class
ohne Event
VB.NET-Quellcode
- Public Class Form1
- Private WithEvents Filesystem As New Filesystem
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim FileReport As New List(Of CopyReport)
- FileReport = Filesystem.CopyRecursive("C:\temp\vb.net\source", "C:\temp\vb.net\destination", FilesystemClass.Filesystem.CopyMode.OverwriteNewDate)
- For Each oFile As CopyReport In FileReport
- Select Case oFile.Status
- Case CopyReport.FileStatus.Copy
- TextBox1.Text &= "*Kopiere: "
- Case CopyReport.FileStatus.Update
- TextBox1.Text &= "*Update: "
- Case CopyReport.FileStatus.CreateDir
- TextBox1.Text &= "*Verzeichnis: "
- Case CopyReport.FileStatus.CopyError
- TextBox1.Text &= "**Fehler: "
- End Select
- TextBox1.Text &= oFile.Message & vbNewLine
- Next
- End Sub
- End Class
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Dodo“ ()