Windows中回收站(Recycle Bin)的存取方法
来源:互联网 发布:学校三级卫生网络 编辑:程序博客网 时间:2024/05/22 08:10
问题: 我想用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的删除命令变成回收命令。岂不是很好吗?图五 运行中的RECYCLE程序 我设计CRecycleFile的目的是方便向我这样的傻瓜程序员使用回收站。
LPCTSTR pszPathName = GetFileNameSomehow(); // 全路径名!
CRecycleFile rf;
rf.Recycle(pszPathName);
有什么比这样做更容易呢?CRecycleFile从SHFILEOPSTRUCT派生而来,所以你可以充分利用其参数。对于一般的回收,因为构造函数已经对SHFILEOPSTRUCT做了初始化,所以不用在参数上做文章。CRecycleFile::Recycle执行关键任务——即发送文件到回收站。最难的部分(一旦你学会了不可思议的FOF_ALLOWUNDO标志)是将调用者串拷贝到某个缓冲,要将另一个空结尾(NULL)添加到串尾。SHFileOperation使你能一次删除许多文件,但是你必须将文件名一个一个连接起来,最后用空结尾(两个NULLs)结束。所幸的是,CRecycleFile完成了最烦人的事情。它使得回收操作的编程易如反掌。看看代码吧!
解答:
这个问题的答案是:外壳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的删除命令变成回收命令。岂不是很好吗?图五 运行中的RECYCLE程序 我设计CRecycleFile的目的是方便向我这样的傻瓜程序员使用回收站。
LPCTSTR pszPathName = GetFileNameSomehow(); // 全路径名!
CRecycleFile rf;
rf.Recycle(pszPathName);
有什么比这样做更容易呢?CRecycleFile从SHFILEOPSTRUCT派生而来,所以你可以充分利用其参数。对于一般的回收,因为构造函数已经对SHFILEOPSTRUCT做了初始化,所以不用在参数上做文章。CRecycleFile::Recycle执行关键任务——即发送文件到回收站。最难的部分(一旦你学会了不可思议的FOF_ALLOWUNDO标志)是将调用者串拷贝到某个缓冲,要将另一个空结尾(NULL)添加到串尾。SHFileOperation使你能一次删除许多文件,但是你必须将文件名一个一个连接起来,最后用空结尾(两个NULLs)结束。所幸的是,CRecycleFile完成了最烦人的事情。它使得回收操作的编程易如反掌。看看代码吧!
- Windows中回收站(Recycle Bin)的存取方法
- ORACLE回收站(Recycle Bin)
- Recycle Bin 回收站
- Oracle回收站(Recycle Bin)
- Oracle回收站(Recycle Bin)
- 10g 回收站(RECYCLE BIN)导致查询表空间的利用率时很慢
- Oracle10g新特性:Recycle Bin回收站
- Oracle10g新特性:Recycle Bin回收站
- Empty Recycle Bin by vb script - 用VB脚本清空Windows回收站
- VC++实现Windows回收站的文件存取
- VC++实现Windows回收站的文件存取
- VC++实现Windows回收站的文件存取
- Windows 2008 r2 开启Recycle Bin
- Recycle Bin
- Recycle Bin
- c#删除移动硬盘中$RECYCLE.BIN的文件、建立索引文件
- Windows 10 Quick Tip: How To Disable Recycle Bin
- VC++实现回收站的文件存取
- Oracle内存结构 share pool library cache
- android学习——DatePicker 和 TimePicker
- asp.net中操作word文档的方法
- 关于MFC和STL的使用
- 新手入门:学好Oracle的六条总结
- Windows中回收站(Recycle Bin)的存取方法
- struts2中取得文件的绝对路径的方法
- 学习英语的网站
- 使用virtualBox与linux中的minicom通信
- Jsp ajax 实现无刷新上传文件
- Object Passal的程序结构
- Rake提示uninitialized constant Rake::DSL解决办法
- Java中serialVersionUID的解释
- HDU 1431 回文素数 DFS+二分