怎样判断文件已经复制完毕?

程序猫 2006-06-22 10:14:53
现在有这样的需求,复制一个文件后马上要进行一个对新复制文件的操作,那么就要求文件必须是复制完成的,但现在不知道怎么判断文件已经复制完成,用CopyFile或者ShFileOperation好象都不能得到这个完成的信息,请各位朋友帮忙看看,谢谢:)
...全文
521 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序猫 2006-06-25
  • 打赏
  • 举报
回复
To tttk(网络芝麻) :
非常感谢您给的资料,CopyFile和ShFileOperation的确如您所说的那样,我现在使用文件流进行了文件复制,满足了我的要求,呵呵:)
程序猫 2006-06-25
  • 打赏
  • 举报
回复
To SonicX(SonicX):
我后来也使用了流对象自己进行文件复制,用的是文件流对象,也就是流的操作结束了以后才会做后边的操作,这样满足了我的要求,呵呵:)
tttk 2006-06-24
  • 打赏
  • 举报
回复
API函数CopyFile和ShFileOperation一般都是在单独的线程中运行,所以不会让你程序停下来单独等待,正如我们在windows文件下拷贝文件的时候,我们还可以对文件夹下的其它文件继续操作一样。

但也正如Windows在执行的拷贝的时候会给我们提供一个可视化的进度条一样,拷贝过程是可以跟踪的。那就是利用API函数给我们提供的CallBack函数。

CopyFile没有CallBack函数,但是CopyFileEx有:
BOOL CopyFileEx(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
LPPROGRESS_ROUTINE lpProgressRoutine,
LPVOID lpData,
LPBOOL pbCancel,
DWORD dwCopyFlags
);
参见MSDN:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/copyfileex.asp

SHFileOperation也有回调函数,答案是定义它的参数结构:
typedef struct _SHFILEOPSTRUCT {
HWND hwnd;
UINT wFunc;
LPCTSTR pFrom;
LPCTSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCTSTR lpszProgressTitle;
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;

参见MSDN:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/shfileopstruct.asp
SonicX 2006-06-24
  • 打赏
  • 举报
回复
var
S:TMemoryStream;
begin
S:=TMemoryStream.Create;
S.LoadFromFile('c:\testA.txt');
S.SaveToFile('c:\testB.txt');
showmessage('已复制完');
//继续执行代码....
end;
feixueliantianbai 2006-06-23
  • 打赏
  • 举报
回复
学习
程序猫 2006-06-23
  • 打赏
  • 举报
回复
TO SonicX(SonicX):
请问用哪一个delphi函数可以判断文件已复制完成呢?
SonicX 2006-06-22
  • 打赏
  • 举报
回复
用DELPHI提供的函数来完成不就行了
程序猫 2006-06-22
  • 打赏
  • 举报
回复
To liangqingzhi(老之):
我这个问题不涉及多文件的复制哦,大概我写的问题有歧义吧,我的意思是复制完一个文件后,马上要对这个新复制好的文件进行操作。
老之 2006-06-22
  • 打赏
  • 举报
回复
其实你可以多个文件一起复制的。
f.pFrom后面的多个文件名用#0#0隔开就可以了。
程序猫 2006-06-22
  • 打赏
  • 举报
回复
TO liangqingzhi(老之):
比如复制一个文件需要30秒的时间,而以上两个函数进行复制时,只要是可以进行复制就立刻返回,并不是等到30秒复制完毕后才返回的。
老之 2006-06-22
  • 打赏
  • 举报
回复
帮助: Returns zero if successful or nonzero if an error occurs.

if ShFileOperation(f)=0 then ShowMessage('成功');
开发背景随着时代的进步和科技的发展,计算机网络的发展日新月异,深刻的影响着我们的生活,受疫情的影响,为了方便教师和学生打印文件以及取文件,节约学生和老师等待时间,节约打印店的打印成本,提高打印店的打印效率,开发一款在线的打印系统是十分有必要的,校园在线打印预约系统把上传文件、选择打印店、打印支付、打印完成取文件以及管理功能集成一身,各管理人员分工合作、相互配合,及时完成打印任务。也方便打印店打印更方便更节约成本的打印文件以及节约学生的空闲时间。现阶段学校的打印文件模式都是传统的打印方式:学生需要跑到打印店拿QQ,微信,U盘给打印店的电脑上传文件,在等待别人打印完成后才能让打印店管理员打印文件,打印店管理员需要一个一个选择文件打印,在打印高峰期间,管理员打印文件忙不过来,不能给同学良好的打印服务,所以传统的打印文件方式不满足与当前社会的发展趋势。 开发目的利用现代计算机相关技术来进行在线打印预约,以减轻打印店工作人员的工作负担以及提高工作效率,减少学生打印等待时间。学生只需要上传需要打印的文件,然后选择打印店,选择支付以及去打印文件大概时间就可以,而打印店管理员只需要接收学生发的文件,以及打印,把打印的文件整理即可,可以根据学生取文件的时间自己编排打印文件的顺序,更好的利用时间,提高打印文件效率。 项目简介该项目是基于SpringBoot+SSM校园在线打印预约系统,包含两个角色:一个是用户模块,一个是打印店管理员模块。用户模块下面有个人中心模块,店铺选择模块,资料分享模块,资料分享模块,交易记录模块,使用帮助模块。在打印店管理员模块下有点单管理模块,店铺管理模块,价格管理模块。 项目运行截图下面从登录页面、用户界面和打印店管理页面三个部位来叙述全部系统。用户、商店和管理员都必须登录才可以浏览在线管理系统系统。管理员可以管理方法商店,但管理员可以是商店。用户登录输入校园在线打印预约系统的网址后,电脑浏览器将进到校园在线打印预约系统。会先进到系统的主页。用户可以先浏览系统首页,随后登录。用户注册如果登录者尚未注册,您需要注册一个帐户。单击右侧的注册按钮,将显示注册页面。用户需要填写用户名、电话号码、登录密码等信息。输入手机号码后,点击发送验证码,验证码就会发送到手机上。填写完毕后,点击注册按钮。添加后会跳转到登录页面。注册界面如图 短信验证码发送成功后,在线预约打印系统会弹出提示,此时用户的手机就会收到短信验证码。短信验证码发送成功界面如图进行账号注册。用户收到短信验证码如图 用户登录后的首页店铺详情个人中心      积分记录我的文件  文件共享管理员登录订单信息  订单详情店铺信息  价格设置 项目论文      

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧