Разница между File.Copy и File.Move - PullRequest
8 голосов
/ 22 июля 2011

В настоящее время я имею дело с небольшим приложением, которое обновляет файлы компактной базы данных mssql на сервере iss.

Я предпочел использовать SSIS для организации потока. Пару дней все работало хорошо, но потом начало выдавать ошибки.

В SSIS я использовал операцию «Переместить файл» для задачи «Файловая система», чтобы переместить сгенерированные файлы из папки в общую папку на сервере iss. Если это не удается, в случае заблокированного файла, он пытается это позже. Но я видел, что иногда файлы в папке назначения начали исчезать.

Тогда я решил написать собственный код. Я удалил «Задачу файловой системы» и вместо нее поставил «Задачу сценария». И напишите в нем пару строк.

string destinationFile, sourceFile;
destinationFile = Path.Combine(Dts.Variables["FileRemoteCopyLocation"].Value.ToString(), Dts.Variables["CreatedFileName"].Value.ToString());
 sourceFile = Path.Combine(Dts.Variables["OrginalFilePath"].Value.ToString(), Dts.Variables["CreatedFileName"].Value.ToString());


bool written = false;


 try
 {
     File.Copy(sourceFile, destinationFile, true);
     File.Delete(sourceFile);
     written = true;
 }
 catch(IOException) {
    //log it
 }


if (written)
     Dts.TaskResult = (int)ScriptResults.Success;
else
     Dts.TaskResult = (int)ScriptResults.Failure;

Это сработало хорошо. Но я попробовал это, заблокировав файл назначения. Я подключил файл назначения в Sql Server Management Studio (это файл sdf). И удивительно, что это тоже работает.

И я попробовал это из операционной системы, скопировав исходный файл и вставив его в место назначения. Windows 7 спрашивает меня, хочу ли я перезаписать его, и я говорю «да», и он перезаписал файл (копировать и заменить), который я использую с другим процессом, без предупреждения, без ошибок. Но если попытаться переименовать или удалить это не позволяет мне сделать это. Или, если я попытаюсь вырезать и вставить его («Переместить и заменить»), там будет написано «вам нужно разрешение для этого действия».

Как я понял, «Копировать, удалить» и «Переместить» - это совершенно разные вещи. И до сих пор не могу понять, как мне перезаписать заблокированный файл.

Есть идеи?

1 Ответ

5 голосов
/ 22 июля 2011

Метод File.Move может использоваться для перемещения файла из одного пути в другой. Этот метод работает на дисковых томах и не выдает исключение, если источник и назначение совпадают.

Вы не можете использовать метод Move для перезаписи существующего файла. Если вы попытаетесь заменить файл, переместив файл с тем же именем в этот каталог, вы получите IOException. Чтобы преодолеть это, вы можете использовать комбинацию методов Копировать и Удалить

Ответ orignal от: Разница между копированием / удалением файла и перемещением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...