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

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

В чем разница между

  • Копирование файла и его удаление с помощью File.Copy() и File.Delete()
  • Перемещение файла с помощью File.Move()

С точки зрения разрешения, необходимого для выполнения этих операций, есть ли разница? Любая помощь очень ценится.

4b9b3361

Ответ 1

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

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

Ответ 2

Производительность, если в одной и той же файловой системе перемещение файла (в упрощенных выражениях) просто регулирует некоторые внутренние регистры самой файловой системы (возможно, корректируя некоторые узлы в red/black-tree), фактически ничего не двигая.

Представьте, что вам нужно переместить 180MiB, и вы можете записать на свой диск примерно 30MiB/s. Затем с копированием/удалением требуется около 6 секунд. С простым движением [той же файловой системой] он идет так быстро, что вы даже не можете этого понять.

(Я однажды написал несколько помощников файловой системы транзакций, которые перемещали или копировали несколько файлов, все или ничего, чтобы сделать фиксацию как можно быстрее, я сначала переместил/скопировал все вещи во временную подпапку и то окончательная фиксация приведет к перемещению существующих данных в другую папку (для включения отката), а новые данные - к цели).

Ответ 3

Я не думаю, что есть разница в разрешении, но я бы предпочел использовать File.Move(), так как у вас есть оба действия, происходящие в одной и той же транзакции. Другими словами, если что-то на ходу выходит из строя, вся операция завершается неудачно. Однако, если вы разложите его на два шага (копировать + удалить), если копия работала и удаление завершилось неудачно, вам придется вручную отменить "транзакцию" (удалить копию).

Ответ 4

Разрешение в передаче файлов проверяется в двух точках: источнике и получателе. Таким образом, если у вас нет разрешения читать в исходной папке или у вас нет разрешения написать в месте назначения, то эти методы генерируют исключение AccessDeniedException. Другими словами, проверка разрешений не зависит от используемого метода.