Delphi дождется завершения процесса копирования файла - PullRequest
7 голосов
/ 30 июня 2011

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

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

Я проверяю, используется ли файл, но, похоже, это не работает с файлами изображений.

HFileRes := CreateFile(pchar(Filename), GENERIC_READ or GENERIC_WRITE, 0, nil,   OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) ;
Result := (HFileRes = INVALID_HANDLE_VALUE);
if (not Result) then
  CloseHandle(HFileRes) ;

У меня такой вопрос: есть ли способ определить, когда файл полностью скопирован, или просто подождать, пока размер файла или время последнего изменения не изменились с момента последней проверки?

1 Ответ

2 голосов
/ 30 июня 2011

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

  FileHandle := FileOpen(FileName, fmOpenRead or fmShareExclusive);
  if FileHandle > 0 then
    {valid file handle}
...