一、复制文件的基本介绍
复制文件是计算机世界中最常见的任务之一。在 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);
}
}