有多种方法可以复制文件:使用TFileStream
,使用TShFileOpStruct
,Windows.CopyFile
(至少这是我发现的)。
当我使用我提到的一种方式开始文件复制时,我的应用程序冻结(只有文件复制窗口处于活动状态),当我关闭我的应用程序时,文件复制也被取消。
是否可以复制/移动文件,以便该过程不依赖于我的应用程序?
我的意思是,如何开始复制/移动操作然后关闭我的应用程序,复制/移动将保留?
答案 0 :(得分:2)
请参阅@David帖子,加上..有一次我记得我有类似要求的地方,我不得不在应用程序关闭的网络驱动器上制作一些数据的备份副本。我只是在OnClose处理程序中将CloseAction设置为caHide,因此保持应用程序加载,直到运行副本的线程完成,然后调用ExitProcess()以最终消失。
这种简单方法的问题是,用户可能会尝试启动应用程序的另一个副本,而旧版本仍在进行备份 - 这会导致很大的问题。我们在用户手册中添加了一个段落来覆盖它,但是有一些更好的解决方案,例如。迫使新实例在启动时等待,直到任何旧实例完成,本来会更好。在这方面,大卫的运行单独流程的解决方案似乎更优越。任何新应用程序实例的副本和启动之间的任何“干扰”。
答案 1 :(得分:1)
即使您关闭了应用程序,也可以尝试复制到其他位置
使用batch
个文件......
xcopy d:\from_folder\*.* d:\Tofolder\.
这可以在批处理文件中执行并让应用程序关闭,批处理文件将继续将文件复制到目标..
你可以使用shellexecute
procedure MycopyAndCloseapplication;
begin
ShellExecute(handle,'open',pchar('d:\mycopyingBatch.bat'),nil,nil, SW_SHOWNORMAL) ;
//here than you close your application..
end;
复制包含更多文件夹的文件夹试试这个
xcopy d:\sourceFolder d:\destinationFolder /E /Y
检查这些链接
writing a batch file fordate based file copying
答案 2 :(得分:0)
我知道在调用进程中执行的所有文件复制API。这意味着当您终止进程时,文件复制也将终止。
因此,为了确保在应用程序关闭后继续进行文件复制,您需要从其他进程运行文件副本。您可以创建一个简单的进程来完成工作并传递命令行参数以指定要复制的文件。
如果您只是想在复制过程中解冻主应用程序,那么您可以创建一个单独的线程来执行文件复制。