Сравнение файла между окнами удаленного и локального дискаC++

Программы на C++. Форум разработчиков
Anonymous
Сравнение файла между окнами удаленного и локального диска

Сообщение Anonymous »

Я пишу приложение, которое загружает вновь созданный (после запуска приложения) файл с сетевого диска на локальный диск.
  • Чтобы обнаружить изменения в файле, я использую опрос с указанием времени последнего обновления и ReadDirectoryChangesW.
  • Затем я попытаюсь открыть файл с помощью CreateFileA в режиме общего доступа. как READ, чтобы проверить, полностью ли создан или скопирован файл.
  • Затем я начну копировать файлы с помощью CopyFileExW.
Например, проблема с задержкой обновления в наблюдателе каталога.

Код: Выделить всё

Modification event
означает событие от наблюдателя каталога о создании или изменении файла

Код: Выделить всё

Queued to process
означает время между событием модификации и попыткой блокировки файла.

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

Код: Выделить всё

Try later
означает, что файл в настоящее время заблокирован на удаленном конце, и мы можем повторить попытку позже

Код: Выделить всё

Start copy
означает начало копирования вновь измененного файла с удаленного компьютера на локальный компьютер после получения блокировки на локальном компьютере.

Код: Выделить всё

Try to lock file
означает попытку получить блокировку на локальном конце, чтобы определить, полностью ли создан файл

означает, что файл полностью скопирован или полностью создан на удаленном конце.




Событие
Статус
Действие
Комментарий




Измененное событие
Копирование или создание




В очереди на обработку
Копирование или создание




Попробуйте заблокировать файл
Копирование или создание
Попробовать позже



Измененное событие
Копирование или создание




В очереди на обработку
Скопировано или создано

Событие, ожидающее изменения


Попытка заблокировать файл
Скопировано или создан
Начать копию



< td>Измененное событие
Скопировано или создано




В очереди на обработку
Скопировано или создано




Попробуйте заблокировать файл
Скопировано или создано< /td>
Начать копирование



/div>
Здесь я копировал один и тот же файл два раза без каких-либо изменений, так как мне этого избежать? Я думаю, что не могу использовать хэш файла, поскольку размер файла составляет несколько ГБ (около 30 ГБ).
Я попробовал сравнить время последнего обновления удаленного файла со временем создания локального файла. Это надежно?

Код: Выделить всё

if last update time of remove file > creation time of local file:
do copy;
else:
ignore;
Я использую C++ с платформой qt для выполнения всех задач. Исходный код этого приложения можно найти на pulldog. Если вам нужны какие-либо разъяснения, дайте мне знать, так как я не знаю, как ответить на отрицательный голос.
Вот связанный с этим вопрос. Как определить, что файлы завершены копирование для дальнейшей обработки?

Подробнее здесь: https://stackoverflow.com/questions/786 ... ve-windows

Вернуться в «C++»