如何复制文件,覆盖现有文件

本文关键字:文件 覆盖 何复制 复制 | 更新日期: 2023-09-27 18:13:30

概述

如何将所有文件从一个目录复制到另一个目录,并用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' already exists.

详细信息

需要明确的是,给定以下目录和其中的文件。。。

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文档解释说,第三个参数bool用于指示是否用正在复制的文件覆盖现有文件。

使用

File.Copy方法(字符串、字符串、布尔值(

将现有文件复制到新文件。覆盖相同的文件名称是允许的。

何处

oversiteType:System.Boolean

如果可以覆盖目标文件,则为true;否则为false。

这是一个解决方案

foreach (string path in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories))
    File.Copy(path, path.Replace(SourcePath, DestinationPath));

File.Copy方法有一个重载,允许覆盖具有相同名称的现有文件。看见http://msdn.microsoft.com/en-us/library/9706cfs5.aspx.