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:\\Test
1\0d:\\\0",它表⽰对要D:盘Test⽬录下的所有⽂件和D:盘上的⽂件进⾏操作。字符串中的"\\"是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、添加代码,编译运⾏程序;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。