收藏 分享(赏)

VC++实现Windows回收站的文件存取.docx

上传人:yjrm16270 文档编号:7659241 上传时间:2019-05-23 格式:DOCX 页数:5 大小:17.92KB
下载 相关 举报
VC++实现Windows回收站的文件存取.docx_第1页
第1页 / 共5页
VC++实现Windows回收站的文件存取.docx_第2页
第2页 / 共5页
VC++实现Windows回收站的文件存取.docx_第3页
第3页 / 共5页
VC++实现Windows回收站的文件存取.docx_第4页
第4页 / 共5页
VC++实现Windows回收站的文件存取.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、VC+实现 Windows 回收站的文件存取在进行文件操作时,可以使用 CFile 类中的 Remove()函数来删除一个文件,但是这样的操作将永久性的删除该文件,不能在必要的时候再恢复该文件,解决这个问题的唯一方法就是把文件送到 Windows 系统中的回收站(Recycle Bin)里面,而不是简单的永久性删除它,这样用户就可以在必要的时候恢复这个文件。这个例子就来说明如何实现编程来实现 Windows 回收站的文件存取操作。 一、实现方法 在 Windows 的 shellapi 文件中定义了一个名为 SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝、

2、删除、移动等,该函数使用起来非常简单,它只有一个指向 SHFILEOPSTRUCT 结构的参数。使用SHFileOperation()函数时只要填写该专用结构 -SHFILEOPSTRUCT,告诉Windows 执行什么样的操作,以及其它重要信息就行了。SHFileOperation()的特别之处在于它是一个高级外壳函数,不同于低级文件处理。当调用 SHFileOperation 操作文件时,相应的外壳拷贝处理器(如果有的话)被调用。如在删除某个文件时,SHFileOperation 会将删除的文件放到Recycle Bin 中。SHFileOperation()函数的原形为: WINSHEL

3、LAPI int WINAPI SHFileOperation (LPSHFILEOPSTRUCT lpFIleOp); 函数中参数类型为一个 LPSHFILEOPSTRUCT 结构,它包含有进行文件操作的各种信息,其具体的结构如下: Typedef struct _ShFILEOPSTRUCT HWND hWnd; /消息发送的窗口句柄; UINT wFunc; /操作类型 LPCSTR pFrom; /源文件及路径 LPCSTR pTo; /目标文件及路径 FILEOP_FLAGS fFlags; /操作与确认标志 BOOL fAnyOperationsAborted; /操作选择位 LP

4、VOID hNameMappings; /文件映射 LPCSTR lpszProgressTitle; /文件操作进度窗口标题 SHFILEOPSTRUCT, FAR * LPSHFILEOPSTRUCT; 在这个结构中,hWnd 是指向发送消息的窗口句柄, pFrom 与 pTo 是进行文件操作的源文件名和目标文件名,它包含文件的路径,对应单个文件的路径字符串,或对于多个文件,必须以 NULL 作为字符串的结尾或文件路径名之间的间隔,否则在程序运行的时候会发生错误。另外,pFrom 和 pTo 都支持通配符*和?,这大大方便了开发人员的使用。例如,源文件或目录有两个,则应是:char pFr

5、om=“d:Test10d:Text.txt0“,它表示对要 D:盘 Test 目录下的所有文件和 D:盘上的 Text.txt 文件进行操作。字符串中的 “是 C 语言中的 的转义符,0则是 NULL。wFunc 是结构中的一个非常重要的成员,它代表着函数将要进行的操作类型,它的取值为如下: FO_COPY: 拷贝文件 pFrom 到 pTo 的指定位置。 FO_RENAME: 将 pFrom 的文件名更名为 pTo 的文件名。 FO_MOVE: 将 pFrom 的文件移动到 pTo 的地方。 FO_DELETE: 删除 pFrom 指定的文件。 使用该函数进行文件拷贝、移动或删除时,如果需

6、要的时间很长,则程序会自动在进行的过程中出现一个无模式的对话框(Windows 操作系统提供的文件操作对话框),用来显示执行的进度和执行的时间,以及正在拷贝、移动或删除的文件名,此时结构中的成员 lpszProgressTitle 显示此对话框的标题。fFlags 是在进行文件操作时的过程和状态控制标识。它主要有如下一些标识,也可以是其组合: FOF_FILESONLY:执行通配符,只执行文件; FOF_ALLOWUNDO:保存 UNDO 信息,以便在回收站中恢复文件; FOF_NOCONFIRMATION:在出现目标文件已存在的时候,如果不设置此项,则它会出现确认是否覆盖的对话框,设置此项则

7、自动确认,进行覆盖,不出现对话框。 FOF_NOERRORUI:设置此项后,当文件处理过程中出现错误时,不出现错误提示,否则会进行错误提示。 FOF_RENAMEONCOLLISION:当已存在文件名时,对其进行更换文提示。 FOF_SILENT:不显示进度对话框。 FOF_WANTMAPPINGHANDLE:要求 SHFileOperation()函数返回正处于操作状态的实际文件列表,文件列表名柄保存在 hNameMappings 成员中。 SHFILEOPSTRUCT 结构还包含一个 SHNAMEMAPPING 结构的数组,此数组保存由 SHELL 计算的每个处于操作状态的文件的新旧路径。

8、 在使用该函数删除文件时必须设置 SHFILEOPSTRUCT 结构中的神秘FOF_ALLOWUNDO 标志,这样才能将待删除的文件拷到 Recycle Bin,从而使用户可以撤销删除操作。需要注意的是,如果 pFrom 设置为某个文件名,用FO_DELETE 标志删除这个文件并不会将它移到 Recycle Bin,甚至设置FOF_ALLOWUNDO 标志也不行,在这里你必须使用全路径名,这样SHFileOperation 才会将删除的文件移到 Recycle Bin。 二、编程步骤 1、 启动 Visual C+6.0,生成一个单文档视图的项目 FileDelete; 2、为项目添加一个菜单

9、 ID_FileDelete,然后用 Visual C+的 Class Wizard 为其在视图类新增消息处理函数 OnFileDelete(); 3、添加代码,编译运行程序; 三、程序代码 / void CFileOperationView:OnFileDelete() int nOk; char strSrc=“d:Vb0“;/源文件路径; char strDst=“d:Vb10“;/目标文件路径; char strTitle=“文件拷贝“; /文件删除进度对话框标题 SHFILEOPSTRUCT FileOp;/定义 SHFILEOPSTRUCT 结构对象; FileOp.hwnd=th

10、is- 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( if(nOk) TRACE(“There is an error: %dn“,nOk); else TRACE(“SHFileOperat

11、ion finished successfullyn“); 四、小结 在 Visual C+编程中实现文件的操作是很多应用程序要涉及到的内容,解决这个问题的一般方法是直接利用 CFile 类的操作成员函数,这种方法对于广大 Visual C+编程爱好者来说已经耳熟能详了,其实使用我们上文介绍的方法,利用 Win32 外壳来实现拷贝、更名、移动、删除等各种文件操作将更加高效、快捷,值得一提的是该方法不仅具有上述功能,它还直接支持对一个目录或目录树进行操作。同时该方法直接调用 Windows 操作系统中的外壳,它的处理过程与 Windows 的自身文件处理过程是一致的,这大大地有利于我们开发的应用程序与操作系统保持高度的一致性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报