Как копировать файлы, перезаписывая существующие файлы? - программирование
Подтвердить что ты не робот

Как копировать файлы, перезаписывая существующие файлы?

Обзор

Как скопировать все файлы из одного каталога в другой каталог и перезаписать все существующие файлы с одинаковым именем в целевом каталоге с помощью С#?

У меня есть следующий код для копирования файлов из одного каталога в другой каталог...

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:\>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 и выполнить это?

4b9b3361

Ответ 1

Попробуйте следующее:

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 указывает, следует ли перезаписывать существующие файлы с копируемыми файлами.

Ответ 2

Скорее используйте

Метод File.Copy(String, String, Boolean)

Копирует существующий файл в новый файл. Перезапись файла того же имя разрешено.

Где

overwriteType: System.Boolean

true, если файл назначения может быть перезаписан; в противном случае - false.

Ответ 3

Это решение

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