为什么80%的码农都做不了架构师?>>>   

function CopyFileEx(lpExistingFileName: PWideChar;         { 源文件 }lpNewFileName: PWideChar;              { 新的目标文件 }lpProgressRoutine: TFNProgressRoutine; { 回调函数; 每复制 64K 调用一次 }lpData: Pointer;                       { 给回调函数的参数 }pbCancel: PBool;                       { 是个布尔值指针; True 是取消复制 }dwCopyFlags: DWORD                     { 复制选项; 下面有补充... }
): BOOL; stdcall;                        { 返回成功或失败 }//dwCopyFlags(复制选项):
COPY_FILE_FAIL_IF_EXISTS = $00000001; { 如果目标存在则失败返回 }
COPY_FILE_RESTARTABLE    = $00000002; { 若失败则重新开始 }//CopyFileEx 使用的回调函数:
function ProgressRoutine(TotalFileSize: LARGE_INTEGER;          { 文件总字节数 }TotalBytesTransferred: LARGE_INTEGER;  { 已复制的字节数 }StreamSize: LARGE_INTEGER;             { 当前流的字节数 }StreamBytesTransferred: LARGE_INTEGER; { 当前流已拷贝的字节数 }dwStreamNumber: DWORD;                 { 当前流序号 }dwCallbackReason: DWORD;               { 回调函数的状态; 下面有补充... }hSourceFile: THANDLE;                  { 源文件句柄 }hDestinationFile: THANDLE;             { 目标文件句柄 }lpData: Pointer                        { CopyFileEx 传递的参数指针 }
): DWORD; stdcall;                       { 返回值; 下面有补充... }//dwCallbackReason(回调函数的状态):
CALLBACK_CHUNK_FINISHED = $00000000; { 复制进行中 }
CALLBACK_STREAM_SWITCH  = $00000001; { 准备开始}//回调函数可以使用的返回值:
PROGRESS_CONTINUE = 0; { 继续 }
PROGRESS_CANCEL   = 1; { 取消 }
PROGRESS_STOP     = 2; { 暂停 }
PROGRESS_QUIET    = 3; { 终止回调, 但不停止复制 }

一个实现复制进度的测试, 测试前在窗体上放个 TProgressBar:


//回调函数; 为了运算我把其中的 LARGE_INTEGER 类型改成 Int64 了
function ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize,StreamBytesTransferred: Int64; dwStreamNumber, dwCallbackReason: DWORD;hSourceFile, hDestinationFile: THANDLE; lpData: Pointer): DWORD; stdcall;
beginForm1.ProgressBar1.Position := Trunc(TotalBytesTransferred / TotalFileSize * 100);Application.ProcessMessages;Result := PROGRESS_CONTINUE;
end;//复制
procedure TForm1.Button1Click(Sender: TObject);
consts = 'C:\Temp\Test.rar';d = 'C:\Temp\NewDir\Test.rar';
beginAssert(FileExists(s), '源文件不存在');Assert(DirectoryExists(ExtractFilePath(d)), '目标路径不存在');CopyFileEx(PChar(s), PChar(d), @ProgressRoutine, nil, nil, COPY_FILE_RESTARTABLE);
end;

转载于:https://my.oschina.net/hermer/blog/320151

WinAPI: CopyFileEx相关推荐

  1. 封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度。

    封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度等. 我的第一篇博客 前段时间无意间想到如何控制文件复制过程的复制速度,并且能实时获得复制进度.对于一个几兆甚至更小的文件,调用API ...

  2. 封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度

    封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度等. 前段时间无意间想到如何控制文件复制过程的复制速度,并且能实时获得复制进度.对于一个几兆甚至更小的文件,调用API函数CopyFi ...

  3. C/C++中Windows API 简单的(Callback)回调机制

    首先来说说什么是调用和回调 当一个程序调用windows API时的过程称为Call 当windows API调用程序里面的函数时这称之为Callback 下面举一个简单的例子来说明回调的用途 编写一 ...

  4. 博客总目录(2007.11.12 - 2010.4.25)

    如果我的学习记录和历程能对你有所帮助, 我非常高兴; 但是 -- "万一" 不是高手.更不是大师, 只是利用工作之余学点东西, 并感觉学得挺吃力. 内容都是写时才会, 难免稚嫩, ...

  5. [WinAPI] API 4 [注册][创建][消息][第一个框架类窗口]

    首先注册了窗口类,然后创建了一个窗口,创建窗口时指定的窗口的属性和窗口消息的处理函数.函数消息的处理函数大多调用系统默认函数来处理. 1 #include<windows.h> 2 3 / ...

  6. 使用WINAPI获得磁盘空间信息

    范文庆们写的关于WINAPI的书,真心不错. 今天在南汇新场桃花节公路边等给同事们送门票时,我都看了一个多小时呢... 粗看一次了.再在细细的熟悉书中每个API吧. 其实,我计划的是,等熟悉WINDO ...

  7. c语言 sysinfo_操作系统:内存分配(C语言 winapi)

    //windows 内存分配. windows/visual stdio*/cl xxx.cpp #include #include#include#include#include#include#i ...

  8. typedef BOOL(WINAPI *MYFUNC) (HWND,COLORREF,BYTE,DWORD);语句的理解

    首选先看一下typedef的四个用途和两个陷阱 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如: char* pa, pb; // 这多数不符合我们的意图, ...

  9. DotNet4应用程序打包工具(把DotNet4安装程序打包进你的应用程序;WINAPI开发,无dotNet环境也可顺利执行)【一】整体思路...

    先说废话 很多朋友对我写的这个系列的第五篇比较感兴趣:http://www.cnblogs.com/liulun/archive/2011/12/08/2280110.html 因为我承诺第五篇就公布 ...

最新文章

  1. Redhat5虚拟系统安装VmwareTools
  2. San CLI 4.0 升级指南
  3. 看看人家架构师那消息队列中间件玩的,那叫一个优雅!
  4. Redis学习-string数据类型
  5. 腾讯内部转岗_腾讯微博即将关停,网友:竟然还活着?
  6. 删除Chrome自动完成功能的输入背景色?
  7. Houdini技术体系大纲
  8. element-ui在打开两个对话框时出现阴影的解决办法
  9. win10系统 专业版 安装教程
  10. 风险分析(Barra风险模型)
  11. 数模系列(3):模糊综合评价法
  12. http错误404.3解决办法
  13. php ckfinder 无效请求.,解决nginx和php使用ckfinder无法上传大文件的问题
  14. 建立一个低成本的工业控制器和树莓Pi 3
  15. 高级事件----笔记
  16. 《Java程序小作业之自动贩卖机》#谭子
  17. 解析:未来物联网发展的十大趋势
  18. 关于液晶刷新速度优化方法
  19. MEM/MBA数学基础(01)预备知识
  20. 用计算机处理信息图文,浅谈计算机技术在报纸图文信息处理中的应用

热门文章

  1. [原]动态创建Web控件制做计算器
  2. 2008 R2 AD通过组策略针对用户进行限制QQ等软件的运行
  3. spring ioc原理(看完后大家可以自己写一个spring)
  4. iOS Public Beta 5值得关注的7个变化
  5. 常用和不常用端口一览表收藏
  6. Cororsync+Pacemaker
  7. php跨域cookie共享使用方法
  8. 【转】Linux下Oracle sqlplus无法使用命令退格删除和历史记录的解决方法(使用rlwrap)...
  9. Apache的性能优化
  10. 经验总结--我的小程序开发和进化之路