gpt4 book ai didi

delphi - 有没有办法让我的delphi程序等待大量文件被复制?

转载 作者:行者123 更新时间:2023-12-03 15:02:31 25 4
gpt4 key购买 nike

我编写了一个程序,可以执行以下操作...

  • 监控文件夹以创建具有特定文件名的新文件,该文件最终将在子文件夹中创建。
  • 创建文件后,子文件夹路径将以 TList 的形式添加到队列中。
  • 文件必须按照创建顺序进行处理。
  • 调用一个过程来处理子文件夹中的所有文件(在本例中为图像),其中涉及将文件移动到网络位置。
  • 子文件夹路径已从队列 (TList) 中删除。
  • 如果队列中存在更多路径,则将下一个路径传递给处理过程。

我遇到的问题是,将文件复制到网络位置的时间根据图像的数量和大小而变化,因此...

有没有办法让Delphi等待文件操作过程完成?

我尝试了一个 while 循环,等待 bool 值更改(在网络上找到最后一个要复制的文件时更改),但挂起应用程序(即使使用 application.processMessage)并且 dirMonitor 组件无法添加TList 的下一个子文件夹。

如有任何建议,我们将不胜感激。

提前致谢。

<小时/>

感谢您的回复...

我看了一下 OmniThread,它看起来很理想...尽管我只能访问 Delphi 7,所以不行。

我遇到的问题是,由于大小和网络流量等不同,文件夹传输所需的时间各不相同...当包含大量图像的文件夹后面跟着一个仅包含少量图像的文件夹时,较小的文件夹两者中的一个是首先到达网络目的地。网络目标是第三方打印后台处理程序,因此打印的顺序错误。

简化的代码:

procedure TForm1.programTimerTimer(Sender: TObject);
begin
if (fileOperationInProgress = false) AND (programPaused = false) then
begin
processOrderQueue;
end;
end;

procedure TForm1.processOrderQueue;
begin
// gets folder paths from queue
// processes images
// copy to print spooler (network location)

copyFolder(fromPath, toPath);

// remove temp files
end;

procedure TForm1.copyFolder(copyFrom : String; copyTo : String);
var
fos : TSHFileOpStruct;
begin
fileOperationInProgress := True;

ZeroMemory(@fos, SizeOf(fos));

with fos do
begin
wFunc := FO_COPY;
fFlags := FOF_FILESONLY or FOF_SILENT;
pFrom := PChar(copyFrom);
pTo := PChar(copyTo)
end;

ShFileOperation(fos);


fileOperationInProgress := False;
end;
<小时/>

我想我已经找到答案了...我将在单个线程中执行所有文件操作,并在启动时设置一个全局“忙” bool 值,并在完成时再次更改它。这样,当任何文件操作正在进行时,外壳监视器就不会错过消息。

最佳答案

您可以实现文件系统监视。本质上,您使用以下标志创建一个文件句柄:

CreateFile(PChar(FDirectoryToWatch), FILE_LIST_DIRECTORY or GENERIC_READ, 
FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OVERLAPPED, 0);

然后创建一个循环来调用 ReadDirectoryChangesW。

Linked 是一个示例类: Why does ReadDirectoryChangesW omit events?

我唯一要做的不同就是在创建类时提供一个事件来通知更改(请记住,在执行过程中调用该事件时,它可能需要同步)。

关于delphi - 有没有办法让我的delphi程序等待大量文件被复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8215710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com