Vorgehensweise: Kopieren von Verzeichnissen
In diesem Artikel wird gezeigt, wie E/A-Klassen zum synchronen Kopieren der Inhalte eines Verzeichnisses an einen anderen Speicherort verwendet werden.
Ein Beispiel für das asynchrone Kopieren von Dateien finden Sie unter Asynchrone Datei-E/A.
In diesem Beispiel werden Unterverzeichnisse kopiert, indem der recursive
-Parameter der CopyDirectory
-Methode auf true
festgelegt wird. Die CopyDirectory
-Methode kopiert Unterverzeichnisse rekursiv, indem sie sich selbst so lange für jedes weitere Unterverzeichnis aufruft, bis alle kopiert wurden.
Beispiel
using System.IO;
CopyDirectory(@".\", @".\copytest", true);
static void CopyDirectory(string sourceDir, string destinationDir, bool recursive)
{
// Get information about the source directory
var dir = new DirectoryInfo(sourceDir);
// Check if the source directory exists
if (!dir.Exists)
throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}");
// Cache directories before we start copying
DirectoryInfo[] dirs = dir.GetDirectories();
// Create the destination directory
Directory.CreateDirectory(destinationDir);
// Get the files in the source directory and copy to the destination directory
foreach (FileInfo file in dir.GetFiles())
{
string targetFilePath = Path.Combine(destinationDir, file.Name);
file.CopyTo(targetFilePath);
}
// If recursive and copying subdirectories, recursively call this method
if (recursive)
{
foreach (DirectoryInfo subDir in dirs)
{
string newDestinationDir = Path.Combine(destinationDir, subDir.Name);
CopyDirectory(subDir.FullName, newDestinationDir, true);
}
}
}
Imports System.IO
Module Program
Sub Main(args As String())
CopyDirectory(".\", ".\copytest", True)
End Sub
Public Sub CopyDirectory(sourceDir As String, destinationDir As String, recursive As Boolean)
' Get information about the source directory
Dim dir As New DirectoryInfo(sourceDir)
' Check if the source directory exists
If Not dir.Exists Then
Throw New DirectoryNotFoundException($"Source directory not found: {dir.FullName}")
End If
' Cache directories before we start copying
Dim dirs As DirectoryInfo() = dir.GetDirectories()
' Create the destination directory
Directory.CreateDirectory(destinationDir)
' Get the files in the source directory and copy to the destination directory
For Each file As FileInfo In dir.GetFiles()
Dim targetFilePath As String = Path.Combine(destinationDir, file.Name)
file.CopyTo(targetFilePath)
Next
' If recursive and copying subdirectories, recursively call this method
If recursive Then
For Each subDir As DirectoryInfo In dirs
Dim newDestinationDir As String = Path.Combine(destinationDir, subDir.Name)
CopyDirectory(subDir.FullName, newDestinationDir, True)
Next
End If
End Sub
End Module
Siehe auch
Zusammenarbeit auf GitHub
Die Quelle für diesen Inhalt finden Sie auf GitHub, wo Sie auch Issues und Pull Requests erstellen und überprüfen können. Weitere Informationen finden Sie in unserem Leitfaden für Mitwirkende.