c# - 如何复制文件,覆盖现有文件?

标签 c# .net file-io

<分区>

概览

如何使用 C# 将所有文件从一个目录复制到另一个目录并覆盖目标目录中所有现有的同名文件?

我有以下代码将文件从一个目录复制到另一个目录...

const string sourceDir = @"C:\AppProject\Smart\SmartStaff\site\document";
const string targetDir = @"C:\AppProject\Smart\ExternalSmartStaff\site\document";
foreach (var file in Directory.GetFiles(sourceDir))
    File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)));

...,但是当目标目录已经包含一个与源目录中的文件同名的文件时,它会失败并出现错误 System.IO.IOException: The file 'C:\AppProject\Smart\ExternalSmartStaff\site\document\SomeDocument.txt' 已经存在。

详情

为了清楚起见,给定以下目录和其中的文件...

C:\>dir C:\AppProject\Smart\SmartStaff\site\document
 ...

 Directory of C:\AppProject\Smart\SmartStaff\site\document

09/03/2014  06:38 PM    <DIR>          .
09/03/2014  06:38 PM    <DIR>          ..
05/25/2014  08:29 PM                44 SomeDocument.txt
05/25/2014  08:32 PM                21 SomeDocument2.txt
05/25/2014  08:36 PM                21 SomeDocument3.txt
05/25/2014  08:43 PM                44 SomeDocument4.txt
               4 File(s)            130 bytes
               2 Dir(s)  128,326,766,592 bytes free

C:\>dir C:\AppProject\Smart\ExternalSmartStaff\site\document
 ...

 Directory of C:\AppProject\Smart\ExternalSmartStaff\site\document

09/03/2014  06:39 PM    <DIR>          .
09/03/2014  06:39 PM    <DIR>          ..
09/03/2014  06:39 PM                26 SomeDocument.txt
09/03/2014  06:39 PM                54 SomeDocument2.txt
               2 File(s)             80 bytes
               2 Dir(s)  128,326,766,592 bytes free

...,我希望 C:\AppProject\Smart\ExternalSmartStaff\site\document 在 C# 中复制文件后看起来像这样:

C:\>dir C:\AppProject\Smart\ExternalSmartStaff\site\document
 ...

 Directory of C:\AppProject\Smart\ExternalSmartStaff\site\document

09/03/2014  06:47 PM    <DIR>          .
09/03/2014  06:47 PM    <DIR>          ..
05/25/2014  08:29 PM                44 SomeDocument.txt
05/25/2014  08:32 PM                21 SomeDocument2.txt
05/25/2014  08:36 PM                21 SomeDocument3.txt
05/25/2014  08:43 PM                44 SomeDocument4.txt
               4 File(s)            130 bytes
               2 Dir(s)  128,327,835,648 bytes free

如何避免 IOException 并完成此操作?

最佳答案

试试这个:

const string sourceDir = @"C:\AppProject\Smart\SmartStaff\site\document";
const string targetDir = @"C:\AppProject\Smart\ExternalSmartStaff\site\document";
foreach (var file in Directory.GetFiles(sourceDir))
    File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)), true);

基本上,您只需调用 File.Copy 的不同重载。 MSDN documentation解释说第三个bool参数是表示是否用被复制的文件覆盖已有的文件。

关于c# - 如何复制文件,覆盖现有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16556766/

相关文章:

java - 用 Java 读取文本文件最快的方法是什么?

C#、对象和多个接口(interface)实现 : how to use correctly?

c# - 将所有 treeView 父级和子级复制到另一个 treeView c# WinForms

c# - WPF Viewport3D 中单色 3D 对象的有用照明

.net - 有没有办法在CLR中创建WeakList或WeakCollection(如WeakReference)?

c# - 在面板上显示图像

c# - 我如何解决 NHibernate.MappingException

c# - 如何在 c# 中覆盖或创建括号 "[]"的自定义行为?

c++ - 为什么 ofstream 有时会创建文件但无法写入文件?

使用 system() 函数时混淆控制台和文件输出