Подтвердить что ты не робот

Разница между File.Replace и (File.Delete + File.Move) в С#

Сегодня у меня возникла странная проблема: с года и нескольких версий/тестов приложения следующий код был успешно использован для замены файла другим.

File.Replace(path + ".tmp", path, null);

Это работало локально, а также с UNC-путями (сетевые ресурсы). Но сегодня я получил следующую ошибку, когда я использовал этот код для замены файла по пути UNC (локальный работает все еще):

Процесс не может получить доступ к файлу, потому что он используется другим процессом

Когда я использую следующий код вместо вышесказанного, он работает:

File.Delete(path);
File.Move(path + ".tmp", path);

Итак, мои вопросы:

  • В чем разница между двумя фрагментами кода?
  • Возможно, Microsoft изменила способ работы File.Replace?

Я использую .Net Framework 4.0 с Visual Studio 2010.

Спасибо заранее.

4b9b3361

Ответ 1

В соответствии с MSDN на File.Replace

File.Replace генерирует исключение, когда...

  • отсутствует целевой файл.
  • источник и получатель находятся на разных томах.

Какой File.Delete, File.Move не будет.

Ответ 2

Здесь статья MSDN на File.Replace()

Создание резервной копии оригинала представляется разницей.

Ответ 3

В статье, связанной Филом Мюррей, говорится, что File.Replace заменяет содержимое файла. Возможно, он пытается открыть файл с доступом для записи?