首页 >> 读书频道 >> 电脑 >> VC++实现Windows回收站的文件存取
 
· Winsock开发网络通
· C++箴言:为类型信息使
· 创建可移植的64位应用程
· C++初学者必看的50个
· 设计OutLook风格的
· C++程序员必需的修养
· 如何编写异常安全的C++
· 在c++程序中重启自己的
· 踏入C++中的雷区——C
· 用GDI+实现半透明渐变
· C++的救赎 C++开源
· 初学者必备:C++经典入
 
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

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


查看有无更新版本

关键字:C++ 2006-9-16

 

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

一、实现方法

在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:盘Test目录下的所有文件和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计算的每个处于操作状态的文件的新旧路径。

在使用该函数删除文件时必须设置SHFILEOPSTRUCT结构中的神秘FOF_ALLOWUNDO标志,这样才能将待删除的文件拷到Recycle Bin,从而使用户可以撤销删除操作。需要注意的是,如果pFrom设置为某个文件名,用FO_DELETE标志删除这个文件并不会将它移到Recycle Bin,甚至设置FOF_ALLOWUNDO标志也不行,在这里你必须使用全路径名,这样SHFileOperation才会将删除的文件移到Recycle Bin。

二、编程步骤

1、 启动Visual C++6.0,生成一个单文档视图的项目FileDelete;

2、为项目添加一个菜单ID_FileDelete,然后用Visual C++的Class Wizard为其在视图类新增消息处理函数OnFileDelete();

3、添加代码,编译运行程序;

三、程序代码

///////////////////////////////////////////////////////////////////////
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");
}
四、小结

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

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

[ 1 ]
VC++实现Windows回收站的文件存取 num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑