Windows中回收站(Recycle Bin)的存取方法
2009-11-11 20:32:10 来源:WEB开发网本文配套源码
问题:
我想用CFile::Remove(或其它可行的方法)删除一个文件,但是只是想将它送到Recycle Bin里面,而不是永久性地删除它,这样我的用户就可以在必要的时候能恢复这个文件。我不通过编程能不能实现?如果必须编程,那如何在程序中存取Recycle Bin?
解答:
这个问题的答案是:外壳API函数——SHFileOperation,它定义在shellapi.文件中。为了使用
SHFileOperation,必须填写专用结构——SHFILEOPSTRUCT——告诉Windows执行什么样的操作,删除哪个文件,以及其它重要信息。SHFileOperation的公共能包括拷贝、删除、移动以及单文件或多文件改名。SHFileOperation的特别之处在于它是一个高级外壳函数,不用于低级文件处理。当你用SHFileOperation拷贝文件时,相应的外壳拷贝处理器(如果有的话)被调用。在有关的文档中是这样说的:“当用于删除某个文件时,SHFileOperation会将删除的文件放到Recycle Bin。”
当然,如果你是第一次试,可能不成功。那是因为文档没有告诉你还必须设置神秘的FOF_ALLOWUNDO标志。将文件拷到Recycle Bin,从而使用户可以撤销删除操作,回想起来这个功能确实很棒。但是当你第一次试验时,如果走马观花似的看文档用处不大。要看就得仔细看。
文档中与本文有关的段落是文件的相对路径名,文档中是这样说的:“如果pFrom设置为某个文件名,用FO_DELETE标志删除这个文件并不会将它移到Recycle Bin,甚至设置FOF_ALLOWUNDO标志也不行。你必须使用全路径名”, 心细的读者从中可以推断出:如果设置FOF_ALLOWUNDO标志并且路径名是全路径名,SHFileOperation才会将删除的文件移到Recycle Bin。实际上,要回收一个文件,必须使用全路径名和FOF_ALLOWUNDO标志,为了具体说明实现细节,我写了一个小类叫做CRecycleFile,以及一个使用这个小类的控制台程序RECYCLE。我觉得自己写的这个程序很酷!因为它可以从MS-DOS命令行回收文件。如图五。如果你使用4DOS(FOR DOS) 或 4NT(FOR NT)之类的命令外壳,为“DEL”命令取个别名为——“回收”命令,从而将DOS的删除命令变成回收命令。岂不是很好吗?
更多精彩
赞助商链接