2016-03-14 3 views
0

У меня есть внешний интерфейс Windows VB для команды Robocopy. Вот строка кода, который передает параметры Robocopy:Остановить блокировку файлов Robocopy при копировании

.StartInfo.Arguments = """" & txtCopyFrom.Text & """ """ & txtCopyTo.Text & _ 
         """ /E /B /XJ /XF ""~*.*"" ""*~.*"" ""desktop.ini"" ""Thumbs.db"" "".lock"" "".Sync*""" & _ 
         " /xd ""Rubbish"" "".Sync*"" "".Box Sync"" ""_private"" ""Outlook Files"" /FFT /R:2 /W:5 /V /TEE" 

Это все работает отлично, за исключением, когда пользователь хочет изменить файл, который находится в середине копирования. Пользователь получает ошибку от своей программы, а затем должен ждать несколько минут, пока файл копируется (размер файла может быть до 1 ГБ, и он копируется на USB-накопитель.

Есть ли переключатель или какой-то способ чтобы Robocopy не блокировал файл во время его копирования? Очевидно, Robocopy должен был бы прервать копию и ждать, пока файл будет доступен, чтобы он мог попробовать снова. Я искал в Интернете решение, но все проблемы, похоже, наоборот, где Robocopy не копирование заблокированных файлов

Некоторые подробности относительно того, что я делаю:.

Мой код вызывает Robocopy каждые 30 секунд с выше флагов (я знаю Робокоп y может зацикливаться сам по себе, но это не совсем то, что я хотел). Я предполагал, что мое приложение запускается только в начале дня, а затем выключается в конце дня. На другой машине пользователь откроет какое-то стороннее программное обеспечение для просмотра изображений, которое заблокирует открываемый файл, обновит некоторые метаданные изображения и сохранит изменения. Проблема возникает, когда мое программное обеспечение блокирует файл изображения перед пользователем, а затем пользователь не может редактировать их файл.

Благодаря

Kristian

+2

Сделайте быструю локальную копию во временный файл и скопируйте это вместо этого? –

ответ

1

В коде, где пользователь хочет получить доступ к файлу, вы можете добавить это перед кодом доступа к файлу.

If Not p.HasExited Then 
    p.Close() 
End If 
Threading.Thread.Sleep(100) ' to give the process time to close the file and close itself 
+0

Я думаю, что пользователь обращается к файлу непосредственно из ОС, а не через приложение, поэтому я не думаю, что это будет решение. –

+0

Хм, возможно, мой комментарий к нему OP будет лучше. Не идеально, но лучше –

+0

Спасибо за комментарии - я попытаюсь посмотреть, как быстро я могу скопировать файл. Несмотря на то, что пользователь находится на другой машине, я все равно смогу найти способ проверить, открыто ли у них программное обеспечение для редактирования, а затем остановить robocopy. – Kristian