8

我有一个线程用于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) ;

我的问题是:有没有办法检测文件何时被完全复制,还是我只是等到文件大小或上次修改时间自上次检查以来没有改变?

4

1 回答 1

3

要确定文件传输是否完成,请先检查您是否可以获得独占访问权限。

  FileHandle := FileOpen(FileName, fmOpenRead or fmShareExclusive);
  if FileHandle > 0 then
    {valid file handle}
于 2011-06-30T17:11:38.923 回答