17

概要

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て達成できますか?

4

4 に答える 4

30

これを試して:

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.CopyMSDN のドキュメントでは、3 番目のboolパラメーターは、コピーされるファイルで既存のファイルを上書きするかどうかを示すものであると説明されています。

于 2013-05-15T04:21:21.117 に答える
8

むしろ使う

File.Copy メソッド (文字列、文字列、ブール値)

既存のファイルを新しいファイルにコピーします。同名ファイルの上書きは許可されています。

どこ

overwriteType: System.Boolean

宛先ファイルを上書きできる場合は true 。それ以外の場合は false。

于 2013-05-15T04:18:12.157 に答える
4

これは解決策です

foreach (string path in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories))
    File.Copy(path, path.Replace(SourcePath, DestinationPath));
于 2013-05-15T04:23:30.517 に答える
2

このFile.Copyメソッドには、同じ名前の既存のファイルを上書きできるオーバーロードがあります。http://msdn.microsoft.com/en-us/library/9706cfs5.aspxを参照してください。

于 2013-05-15T04:19:56.733 に答える