Windows回收站的文件存取

Windows回收站的文件存取,第1张

Windows回收站的文件存取,第2张

一、实施方法

在Windows的shellapi文件中定义了一个名为SHFileOperation()的shell函数,可以用来实现各种文件操作,如复制、删除、移动文件等。这个函数使用起来非常简单,它只有一个指向SHFILEOPSTRUCT结构的参数。使用SHFileOperation()函数时,只需填写特殊结构——SHFILEOPSTRUCT,告诉Windows要执行哪种操作,以及其他重要信息。SHFileOperation()的特殊之处在于,它是一个高级shell函数,与低级文件处理不同。当调用SHFileOperation操作文件时,会调用相应的shell复制处理器(如果有)。如果文件被删除,SHFileOperation会将删除的文件放入回收站。SHFileOperation()函数的原型是:

WINSHELLAPI int WINAPI shfile operation(lpshfileop struct lpFIleOp);

函数中的参数类型是一个LPSHFILEOPSTRUCT结构,包含文件操作的各种信息。其具体结构如下:

typedef struct _ ShFILEOPSTRUCT
{
HWND HWND;//消息发送的窗口句柄;
UINT w func;//操作类型
LPC str pFrom;//源文件和路径
LPC str pTo;//目标文件和路径
fileop _ flags flags;//操作和确认标志
bool fanyo operations saborted;//操作选择位
LPVOID hNameMappings;//文件映射
LPCSTR lpszProgressTitle;//文件操作进度窗口标题
} shfileopstruct,far * lpshfileopstruct

在这个结构中,hWnd是发送消息的窗口句柄,pFrom和pTo是文件操作的源文件名和目的文件名,其中包含文件的路径,单个文件对应的路径字符串,或者对于多个文件,必须使用NULL作为字符串的结尾或者文件路径名之间的间隔,否则程序运行时会出错。此外,pFrom和pTo都支持通配符*和?,大大方便了开发者的使用。比如有两个源文件或目录,应该是:char p from[]= " D:\ \ Test1 \ 0d:\ \ Text.txt \ 0 ",意思是要操作D: disk的测试目录下的所有文件和D: disk上的text . txt文件。字符串中的“\ \”是C语言中“\”的转义符,“[7]”为空。WFunc是结构中非常重要的成员,它表示函数要执行的操作类型。其值如下:

FO_COPY:将文件pFrom复制到pTo的指定位置。

FO_RENAME:将pFrom的文件名重命名为pTo的文件名。

FO_MOVE:将pFrom中的文件移动到pTo。

FO_DELETE:删除pFrom指定的文件。

使用该功能复制、移动或删除文件时,如果需要较长时间,程序会在进程中自动出现一个无模式对话框(Windows操作系统提供的文件操作对话框),用于显示执行进度和时间,以及被复制、移动或删除的文件名。此时,结构中的成员lpszProgressTitle显示此对话框的标题。FFlags是文件操作过程中的进程和状态控制标志。它主要有以下标志,或它们的组合:

FOF_FILESONLY:执行通配符,只执行文件;

FOF_ALLOWUNDO:保存撤消信息以恢复回收站中的文件;

FOF_NOCONFIRMATION:当目标文件已经存在时,如果未设置此项,会出现对话框确认是否覆盖。如果设置了此项,会自动确认并覆盖,不会出现对话框。

Fof _ no error UI:设置此项后,当文件处理出现错误时,不会出现错误提示,否则会给出错误提示。

fof _ renameoncollision:当文件名已经存在时,会提示替换它。

FOF_SILENT:不显示进度对话框。

FOF_WANTMAPPINGHANDLE:需要SHFileOperation()函数返回运行状态下的实际文件列表,文件列表名称句柄保存在hNameMappings成员中。

SHFILEOPSTRUCT结构还包含一个SHNAMEMAPPING结构的数组,它保存了SHELL计算出的每个文件在操作中的新旧路径。

使用该函数删除文件时,必须设置SHFILEOPSTRUCT结构中神秘的FOF_ALLOWUNDO标志,这样才能把要删除的文件复制到回收站,用户才能撤销删除。需要注意的是,如果pFrom设置为某个文件名,用FO_DELETE标志删除这个文件并不会把它移到回收站,甚至设置FOF_ALLOWUNDO标志也不会。这里,您必须使用完整的路径名,以便SHFileOperation将删除的文件移动到回收站。

二、编程步骤

1.启动Visual C++6.0生成单文档视图项目FileDelete;

2.为项目添加一个菜单ID_FileDelete,然后使用Visual C++的类向导将消息处理函数onFileDelete()添加到视图类中;

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

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » Windows回收站的文件存取

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情