如何复制文件,覆盖现有文件
本文关键字:文件 覆盖 何复制 复制 | 更新日期: 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.