2012-04-12 6 views
1

Я пытаюсь переместить файл (File.Move) заблокирован .dll для выполнения обновления приложения. Метод File.Move был выполнен без исключений. Но файл не был перемещен. Я имею в виду, после выполнения метода File.Move у меня есть две копии одного и того же файла: в папке назначения и в исходной папке. Вот код :)Переместить заблокированный файл

File.Move(fileName, newFileName); 

Может ли кто-нибудь объяснить причину этого?

+1

В чем ваш вопрос? – Nick

+0

Если файл используется, его нельзя удалить (ОС предотвращает это) ... вы ожидаете другого поведения? – Marco

+0

Отредактировано. ОС может перемещать заблокированные файлы. –

ответ

7

File.Move томами выполняет две операции в последовательности:

  1. File Copy
  2. Файл Удалить

Кажется, как будто первый преуспевает и второй молча терпит неудачу. Результаты, как ожидалось.

Примечание здесь: http://msdn.microsoft.com/en-us/library/system.io.file.move.aspx

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

+0

. Замечание: File.Move выполняет операции копирования и удаления только тогда, когда мы пытаемся переместить файл через тома. Else File.Move просто обновляет метаданные файлов (из-за возможности перемещения заблокированных файлов). –

+0

Ну, это перемещение по томасам? Объясню все это. – yamen

0

Как правило, в этом случае у вас либо есть отдельный процесс обновления, который не требует какой-либо из DLL-приложений, поэтому вы создаете обновление, которое может перемещать все, что ему нравится, обновлять и перезапускать приложение.

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

0

File.Move Метод сначала скопирует файл fileName в файл 'newFileName'. Как только первый шаг будет успешным, он удалит файл «fileName».

Теперь, если файл 'fileName' уже открыт/заблокирован, он не сможет удалить файл.

Смежные вопросы