-
c语言入门之在拷贝、删除文件时显示飞行的文件
可以很容易地调用API函数CopyFile, DeleteFile, 以及MoveFile来复制、删除、移动文件,这些功能相当容易使用,但是他们不显示飞行文件夹动画。下面是每一个API的例子。
//复制SOURCE.TXT到DEST.TXT,FALSE参数告诉windows如果文件DEST.TXT
//已经存在则复制失败,CopyFile的返回值是BOOL类型
if( CopyFile("C:\\SOURCE.TXT","C:\\DEST.TXT", FALSE) == FALSE)
Application->MessageBox("CopyFile failed", "Error", MB_OK);
//如果移动或删除失败则返回FALSE
MoveFile("C:\\SOURCE.TXT","C:\\WINDOWS\\TEMP\\DEST.TXT");
DeleteFile("C:\\SOURCE.TXT");
这些功能很容易使用,但是不幸但是他们不显示飞行文件夹动画。为了显示动画,你必须使用SHFileOperation 这个API函数。下面是用SHFileOperation完成上面的操作的例子,注意复制和移动操作一定要指定目标文件夹。
//确认你包含了头文件SHELLAPI.H
//如果你好奇的话,这个文件地位置在INCLUDE\WIN32目录下
#include <shellapi.h>
// 复制SOURCE.TXT到DEST.TXT;
char *From = "C:\\SOURCE.TXT\0";
char *To = "C:\\DEST.TXT\0";
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.hwnd = Handle; // 主窗体或应用程序的句柄
op.wFunc = FO_COPY;
op.pFrom = From;
op.pTo = To;
op.fFlags= 0;
SHFileOperation( &op);
// 移动SOURCE.TXT到windows的临时目录
char *From = "C:\\SOURCE.TXT\0";
char *To = "C:\\WINDOWS\\TEMP\0";
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.hwnd = Handle;
op.wFunc = FO_MOVE;
op.pFrom = From;
op.pTo = To;
op.fFlags= 0;
SHFileOperation( &op);
//把所有的临时文件删除到回收站
char *File = "C:\\windows\\temp\\*.TMP\0";
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.hwnd = Handle;
op.wFunc = FO_DELETE;
op.pFrom = File;
op.fFlags= FOF_ALLOWUNDO;
SHFileOperation( &op);
// 复制根目录所有的文本文件到临时目录。
char *From = "C:\\*.TXT\0";
char *To = "C:\\WINDOWS\\TEMP\0";
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.hwnd = Handle;
op.wFunc = FO_COPY;
op.pFrom = From;
op.pTo = To;
op.fFlags= 0;
SHFileOperation( &op);
注意:
1:当你指定FO_DELETE操作的时候,如果fFlags包含FOF_ALLOWUNDO,文件将送到回收站,否则它们将被删除.
2:op结构的项目pFrom和pTo是字符指针,而不是数组.它们必须指向一个字符串,因为结构不含有任何存储空间,不能这样做:
op.pFrom = "C:\\*.TXT";
op.pTo = "C:\\TEMP";
3:在文件名字符串中注意到额外的终止符0(在字符串中的'\0')。MSDN文档表明pTo和pFrom字符串一定是双重零结束。
4:pFrom和pTo指向的内存可以包含多个字符串,字符串之间用0分隔,最后也要用双重0结束,下面是一个例子:
char *From = "C:\\*.txt\0C:\\*.log\0C:\\*.tmp\0";
op.pFrom = From;
//也可以用空白分隔
char *From = "C:\\*.txt\0"
"C:\\*.log\0"
"C:\\*.tmp\0";
5:当复制或者移动文件的时候,在fFlags参数中包含FOF_RENAMEONCOLLISION将阻止函数改写现存的文件,shell将建立名字叫做“复件 原文件名”的复制品(资源管理器就是这样做的).
6:你能也指定FO_RENAME作为wFunc参数.fFlags参数能包含很多其它高级方式,更多信息请参阅WIN32.HLP文件.
栏目列表
最新更新
C#基于接口设计三层架构Unity篇
C#线程 入门
C#读取静态类常量属性和值
C# 插件式编程
C# 委托与事件有啥区别?
C#队列学习笔记:队列(Queue)和堆栈(Stack
linq 多表分组左连接查询查询统计
C#队列学习笔记:MSMQ入门一
C# 基础知识系列- 1 数据类型
二、C#入门—基础语法
C# 在Word中添加Latex 数学公式和符号
inncheck命令 – 检查语法
基于UDP的服务器端和客户端
再谈UDP和TCP
在socket编程中使用域名
网络数据传输时的大小端问题
socket编程实现文件传输功能
如何优雅地断开TCP连接?
图解TCP四次握手断开连接
详细分析TCP数据的传输过程
SqlServer 利用游标批量更新数据
BOS只读状态修改
SQL Server等待事件—PAGEIOLATCH_EX
数据库多行转换为单一列
获取数据表最后最后访问,修改,更新,
计算经历的时间
SQL查询结果自定义排序
修改数据库默认位置
日期简单加或减
从日期获取年,月或日