Определите, может ли файл быть перемещен или скопирован - PullRequest
3 голосов
/ 20 марта 2009

Помимо попытки выполнить операцию и перехвата исключения, существует ли метод определения возможности перемещения или копирования файла?

Ответы [ 3 ]

5 голосов
/ 20 марта 2009

Нет способа узнать, будет ли перемещение или копирование файла гарантировано успешным или нет.

Но вы можете проверить несколько вещей, чтобы убедиться, что это не удастся:

  • Проверьте наличие места на диске в месте назначения (необходим размер файла не менее)
  • Проверьте, существует ли уже файл в месте назначения
  • Откройте файл, запросив доступ на чтение исходного файла, чтобы убедиться, что 1) у вас есть права на него, 2) он не используется.
  • Вы можете прочитать весь исходный файл, чтобы убедиться, что в нем нет блокировок.
  • Уловка, используемая проводником Windows при копировании файлов (или перемещении по томам), заключается в том, чтобы сначала создать пустой файл, а затем расширить его до полного размера. Только после того, как файл полностью выделен, в него начинают происходить записи.
  • При выделении файла с размером данных, которые вы хотите скопировать, также будет указано, есть ли уже достигнутая цитата файловой системы.
  • Если файл используется, и вы хотите зайти так далеко, вы можете использовать Volume Shadow Copy (VSS).

Подробнее о блокировке файлов:

Пожалуйста, смотрите мой ответ здесь для получения дополнительной информации о блокировке файлов и разрешениях в linux .

Пожалуйста, смотрите мой ответ здесь для получения дополнительной информации о блокировке файлов и разрешениях в Windows .

0 голосов
/ 20 марта 2009

Если файл можно прочитать, его можно переместить или скопировать. Вы спрашиваете, как можно проверить, будет ли перемещение или копирование успешным?

0 голосов
/ 20 марта 2009

В общем, посмотрите, существует ли Файл и имеет ли текущий пользователь разрешение на чтение файла (или удаление файла для перемещения) и имеет соответствующие разрешения для каталога назначения. Также, для копирования, вы должны проверить, есть ли свободное место на диске. Конечно, прежде всего убедитесь, что исходный файл и каталог назначения даже существуют.

Конечно, это не гарантирует, что операция будет успешной. Многое может случиться. Даже разрешения для файла могут изменяться между временем, которое вы проверяете, и временем, когда вы выполняете операцию.

...