一、複製文件的基本介紹
複製文件是計算機世界中最常見的任務之一。在 C# 編程中,可以使用 System.IO 命名空間中的 File 類來實現此操作。File 類提供了一組方法,其中最重要的是 Copy() 和 CopyTo() 方法。
在複製文件之前,要確保原始文件存在。可以使用 File 類中的 Exists() 方法來檢查文件是否存在。另外,如果目標文件已經存在,則可以使用 File 類中的 Delete() 方法刪除該文件。
if (File.Exists(sourceFile))
{
if (File.Exists(destinationFile))
{
File.Delete(destinationFile);
}
File.Copy(sourceFile, destinationFile);
}
二、複製文件夾
除了複製單個文件外,還可以使用 C# 語言複製整個文件夾,包括文件夾內的所有文件和子文件夾。可通過使用遞歸方式複製文件夾中的所有文件。
以下是一個遞歸函數的示例,可以將源文件夾中的所有文件和子文件夾複製到目標文件夾中:
private static void CopyFolder(string sourceFolder, string destinationFolder)
{
string[] files = Directory.GetFiles(sourceFolder);
foreach (string file in files)
{
string name = Path.GetFileName(file);
string dest = Path.Combine(destinationFolder, name);
File.Copy(file, dest);
}
string[] folders = Directory.GetDirectories(sourceFolder);
foreach (string folder in folders)
{
string name = Path.GetFileName(folder);
string dest = Path.Combine(destinationFolder, name);
Directory.CreateDirectory(dest);
CopyFolder(folder, dest);
}
}
三、文件複製的錯誤處理
在複製文件時,有一些常見的錯誤需要處理。例如,在寫入目標文件時可能會發生錯誤,如目標磁盤已滿或受寫入保護。可以使用 try-catch 塊來處理這些錯誤。
try
{
File.Copy(sourceFile, destinationFile, true);
}
catch (IOException e)
{
Console.WriteLine(e.Message);
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine(e.Message);
}
四、複製文件的高級選項
File.Copy() 方法提供了一些高級選項,讓您可以更好地控制文件複製。
例如,您可以使用 Copy() 方法將文件複製到目標文件以及目標文件夾,並使用 CopyOptions 枚舉來指定如果源文件和目標文件相同,複製操作應該如何進行操作。以下示例將源文件複製到多個目標,並在目標文件夾中保存所有文件的副本:
File.Copy(sourceFile, Path.Combine(destinationFolder, sourceFileName));
File.Copy(sourceFile, Path.Combine(destinationFolder, DateTime.Now.ToString("yyyyMMddHHmmss") + sourceFileName));
五、複製大文件
在處理大型文件(例如視頻或音頻文件)時,複製速度會非常重要。在這種情況下,您可以使用流操作或使用異步操作來複制文件。
下面是使用流操作複製大型文件的示例:
FileStream sourceStream = new FileStream(sourceFile, FileMode.Open);
FileStream destinationStream = new FileStream(destinationFile, FileMode.CreateNew);
byte[] buffer = new byte[1024 * 1024];
int bytesRead;
while ((bytesRead = sourceStream.Read(buffer, 0, buffer.Length)) > 0)
{
destinationStream.Write(buffer, 0, bytesRead);
}
sourceStream.Close();
destinationStream.Close();
下面是使用異步操作來複制大型文件的示例:
async Task CopyFileAsync(string source, string destination)
{
using (FileStream sourceStream = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true))
using (FileStream destinationStream = new FileStream(destination, FileMode.CreateNew, FileAccess.Write, FileShare.None, 4096, true))
{
await sourceStream.CopyToAsync(destinationStream);
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/251942.html