WinAPI: CopyFileEx
为什么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相关推荐
- 封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度。
封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度等. 我的第一篇博客 前段时间无意间想到如何控制文件复制过程的复制速度,并且能实时获得复制进度.对于一个几兆甚至更小的文件,调用API ...
- 封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度
封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度等. 前段时间无意间想到如何控制文件复制过程的复制速度,并且能实时获得复制进度.对于一个几兆甚至更小的文件,调用API函数CopyFi ...
- C/C++中Windows API 简单的(Callback)回调机制
首先来说说什么是调用和回调 当一个程序调用windows API时的过程称为Call 当windows API调用程序里面的函数时这称之为Callback 下面举一个简单的例子来说明回调的用途 编写一 ...
- 博客总目录(2007.11.12 - 2010.4.25)
如果我的学习记录和历程能对你有所帮助, 我非常高兴; 但是 -- "万一" 不是高手.更不是大师, 只是利用工作之余学点东西, 并感觉学得挺吃力. 内容都是写时才会, 难免稚嫩, ...
- [WinAPI] API 4 [注册][创建][消息][第一个框架类窗口]
首先注册了窗口类,然后创建了一个窗口,创建窗口时指定的窗口的属性和窗口消息的处理函数.函数消息的处理函数大多调用系统默认函数来处理. 1 #include<windows.h> 2 3 / ...
- 使用WINAPI获得磁盘空间信息
范文庆们写的关于WINAPI的书,真心不错. 今天在南汇新场桃花节公路边等给同事们送门票时,我都看了一个多小时呢... 粗看一次了.再在细细的熟悉书中每个API吧. 其实,我计划的是,等熟悉WINDO ...
- c语言 sysinfo_操作系统:内存分配(C语言 winapi)
//windows 内存分配. windows/visual stdio*/cl xxx.cpp #include #include#include#include#include#include#i ...
- typedef BOOL(WINAPI *MYFUNC) (HWND,COLORREF,BYTE,DWORD);语句的理解
首选先看一下typedef的四个用途和两个陷阱 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如: char* pa, pb; // 这多数不符合我们的意图, ...
- DotNet4应用程序打包工具(把DotNet4安装程序打包进你的应用程序;WINAPI开发,无dotNet环境也可顺利执行)【一】整体思路...
先说废话 很多朋友对我写的这个系列的第五篇比较感兴趣:http://www.cnblogs.com/liulun/archive/2011/12/08/2280110.html 因为我承诺第五篇就公布 ...
最新文章
- Redhat5虚拟系统安装VmwareTools
- San CLI 4.0 升级指南
- 看看人家架构师那消息队列中间件玩的,那叫一个优雅!
- Redis学习-string数据类型
- 腾讯内部转岗_腾讯微博即将关停,网友:竟然还活着?
- 删除Chrome自动完成功能的输入背景色?
- Houdini技术体系大纲
- element-ui在打开两个对话框时出现阴影的解决办法
- win10系统 专业版 安装教程
- 风险分析(Barra风险模型)
- 数模系列(3):模糊综合评价法
- http错误404.3解决办法
- php ckfinder 无效请求.,解决nginx和php使用ckfinder无法上传大文件的问题
- 建立一个低成本的工业控制器和树莓Pi 3
- 高级事件----笔记
- 《Java程序小作业之自动贩卖机》#谭子
- 解析:未来物联网发展的十大趋势
- 关于液晶刷新速度优化方法
- MEM/MBA数学基础(01)预备知识
- 用计算机处理信息图文,浅谈计算机技术在报纸图文信息处理中的应用