使用SHFileOperation实现文件的复制,删除
来源:互联网 发布:ubuntu 拼音 编辑:程序博客网 时间:2024/05/19 07:11
在Windows的shellapi文件中定义了一个名为SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝、删除、移动等,该函数使用起来非常简单,它只有一个指向SHFILEOPSTRUCT结构的参数。使用SHFileOperation()函数时只要填写该专用结构–SHFILEOPSTRUCT,告诉Windows执行什么样的操作,以及其它重要信息就行了。SHFileOperation()的特别之处在于它是一个高级外壳函数,不同于低级文件处理。当调用SHFileOperation操作文件时,相应的外壳拷贝处理器(如果有的话)被调用。如在删除某个文件时,SHFileOperation会将删除的文件放到Recycle Bin中。SHFileOperation()函数的原形为:
WINSHELLAPI int WINAPI SHFileOperation (LPSHFILEOPSTRUCT lpFIleOp);
函数中参数类型为一个LPSHFILEOPSTRUCT结构,它包含有进行文件操作的各种信息,其具体的结构如下:
Typedef struct _ShFILEOPSTRUCT
{
HWND hWnd; //消息发送的窗口句柄;
UINT wFunc; //操作类型
LPCSTR pFrom; //源文件及路径
LPCSTR pTo; //目标文件及路径
FILEOP_FLAGS fFlags; //操作与确认标志
BOOL fAnyOperationsAborted; //操作选择位
LPVOID hNameMappings; //文件映射
LPCSTR lpszProgressTitle; //文件操作进度窗口标题
}SHFILEOPSTRUCT, FAR * LPSHFILEOPSTRUCT;
在这个结构中,hWnd是指向发送消息的窗口句柄,pFrom与pTo是进行文件操作的源文件名和目标文件名,它包含文件的路径,对应单个文件的路径字符串,或对于多个文件,必须以NULL作为字符串的结尾或文件路径名之间的间隔,否则在程序运行的时候会发生错误。另外,pFrom和pTo都支持通配符*和?,这大大方便了开发人员的使用。例如,源文件或目录有两个,则应是:char pFrom[]=”d:/Test1/0d:/Text.txt/0”,它表示对要D:盘Test1目录下的所有文件和D:盘上的Text.txt文件进行操作。字符串中的”“是C语言中的”的转义符,’/0’则是NULL。wFunc 是结构中的一个非常重要的成员,它代表着函数将要进行的操作类型,它的取值为如下:
·FO_COPY: 拷贝文件pFrom到pTo 的指定位置。
·FO_RENAME: 将pFrom的文件名更名为pTo的文件名。
·FO_MOVE: 将pFrom的文件移动到pTo的地方。
·FO_DELETE: 删除pFrom指定的文件。
使用该函数进行文件拷贝、移动或删除时,如果需要的时间很长,则程序会自动在进行的过程中出现一个无模式的对话框(Windows操作系统提供的文件操作对话框),用来显示执行的进度和执行的时间,以及正在拷贝、移动或删除的文件名,此时结构中的成员lpszProgressTitle显示此对话框的标题。fFlags是在进行文件操作时的过程和状态控制标识。它主要有如下一些标识,也可以是其组合:
·FOF_FILESONLY:执行通配符,只执行文件;
·FOF_ALLOWUNDO:保存UNDO信息,以便在回收站中恢复文件;
·FOF_NOCONFIRMATION:在出现目标文件已存在的时候,如果不设置此项,则它会出现确认是否覆盖的对话框,设置此项则自动确认,进行覆盖,不出现对话框。
·FOF_NOERRORUI:设置此项后,当文件处理过程中出现错误时,不出现错误提示,否则会进行错误提示。
·FOF_RENAMEONCOLLISION:当已存在文件名时,对其进行更换文提示。
·FOF_SILENT:不显示进度对话框。
·FOF_WANTMAPPINGHANDLE:要求SHFileOperation()函数返回正处于操作状态的实际文件列表,文件列表名柄保存在hNameMappings成员中。
·SHFILEOPSTRUCT结构还包含一个SHNAMEMAPPING结构的数组,此数组保存由SHELL计算的每个处于操作状态的文件的新旧路径。
同时也有一个重要的应用就是:
在进行文件操作时,可以使用CFile类中的Remove()函数来删除一个文件,但是这样的操作将永久性的删除该文件,不能在必要的时候再恢复该文件,解决这个问题的唯一方法就是把文件送到Windows系统中的回收站(Recycle Bin)里面,而不是简单的永久性删除它,这样用户就可以在必要的时候恢复这个文件。用这个函数实现编程来实现Windows回收站的文件存取操作。
在使用该函数删除文件时必须设置SHFILEOPSTRUCT结构中的神秘FOF_ALLOWUNDO标志,这样才能将待删除的文件拷到Recycle Bin,从而使用户可以撤销删除操作。需要注意的是,如果pFrom设置为某个文件名,用FO_DELETE标志删除这个文件并不会将它移到Recycle Bin,甚至设置FOF_ALLOWUNDO标志也不行,在这里你必须使用全路径名,这样SHFileOperation才会将删除的文件移到Recycle Bin。
文件删除
void CFileOperationView::OnFileDelete() { int nOk; char strSrc[]="d:/Vb/0";//源文件路径; char strDst[]="d:/Vb1/0";//目标文件路径; char strTitle[]="文件拷贝"; //文件删除进度对话框标题 SHFILEOPSTRUCT FileOp;//定义SHFILEOPSTRUCT结构对象; FileOp.hwnd=this->m_hWnd; FileOp.wFunc=FO_DELETE; //执行文件删除操作; FileOp.pFrom=strSrc; FileOp.pTo=strDst; FileOp.fFlags=FOF_ALLOWUNDO;//此标志使删除文件备份到Windows回收站 FileOp.hNameMappings=NULL; FileOp.lpszProgressTitle=strTitle; //开始删除文件 nOk=SHFileOperation(&FileOp); if(nOk) TRACE("There is an error: %d/n",nOk); else TRACE("SHFileOperation finished successfully/n"); }
文件拷贝
BOOL CopyFolder(LPCTSTR lpszFromPath, LPCTSTR lpszToPath){ int nLengthFrm = strlen(lpszFromPath); char *NewPathFrm = new char[nLengthFrm + 2]; strcpy(NewPathFrm, lpszFromPath); NewPathFrm[nLengthFrm] = '\0'; NewPathFrm[nLengthFrm + 1] = '\0'; SHFILEOPSTRUCT FileOp; ZeroMemory((void*)&FileOp, sizeof(SHFILEOPSTRUCT)); FileOp.fFlags = FOF_NOCONFIRMATION; FileOp.hNameMappings = NULL; FileOp.hwnd = NULL; FileOp.lpszProgressTitle = NULL; FileOp.pFrom = NewPathFrm; FileOp.pTo = lpszToPath; FileOp.wFunc = FO_COPY; return SHFileOperation(&FileOp) == 0;}
说明:lpszFromPath为源文件夹路径,lpszToPath为目的文件夹路径,返回TRUE表示复制成功,返回FALSE复制失败。
- 使用SHFileOperation实现文件的复制,删除
- Shell的文件操作函数SHFileOperation 移动,复制,删除文件
- VC 移动,复制,删除文件(SHFileOperation)
- VC 移动,复制,删除文件(SHFileOperation)
- VC 移动,复制,删除文件(SHFileOperation)
- VC 移动,复制,删除文件(SHFileOperation)
- VC 移动,复制,删除文件(SHFileOperation) .
- VC 移动,复制,删除文件(SHFileOperation)
- SHFileOperation()函数移动,复制,删除文件\文件夹
- PB利用API-SHFileOperation 文件操作函数 实现多文件及文件夹的删除复制等操作
- SHFileOperation 复制文件出错的问题
- vc使用SHFileOperation()的使用对文件夹的复制,删除,移动,重命名
- ::SHFileOperation进行文件复制
- 监视资源管理器的文件复制/删除/移动操作,不要太过寄望于Hook SHFileOperation
- VC 移动,复制,删除文件(SHFileOperation)时显示动画
- 使用SHFileOperation 复制文件夹
- C# 使用SHFileOperation 复制文件 注意引用方式
- 在VB中使用API“SHFileOperation”删除文件的三个问题
- ORA-00923: 未找到要求的 FROM 关键字
- Caffe源码
- ubuntu下mysql安装及python操作
- 什么是跨域,跨域解决办法
- 欧几里得空间
- 使用SHFileOperation实现文件的复制,删除
- hnust 1439 可排回文
- C++编译链接
- 好未来提前批面试
- 求平方根
- 项目中遇到的中文乱码问题
- 由中序与后序遍历得到二叉树
- [PAT-甲级]1069.The Black Hole of Numbers
- POJ 2155 Matrix(二维树状数组)