读书人

VB怎么取得"回收站"信息并操作"回收

发布时间: 2012-03-11 18:15:38 作者: rapoo

VB如何取得"回收站"信息并操作"回收站"?
1、如何取得回收站里的所有文件列表?包括文件大小、删除日期?
2、如何用程序实现回收站中某文件的“还原”、“删除”操作?

[解决办法]
 我们在编程实践中,经常需要涉及到文件的删除操作,而一般的程序语言中的删除指令是绝对删除的,即不将文件放入回收站,这给我们在设计更加具有windows风格的应用程序带来了一定的不便。

为了克服这个障碍,我们需要通过调用独立于编程环境以外的windows api函数来实现,以下是vb6的示例代码,在windows98中测试通过。它可以选择是否将文件删除到回收站。

  (一)编程原理;

  将文件删除到回收站的过程实际上就是,将被删除的文件加上原来存放位置信息、删除日期等信息后,移动到WINDOWS所在分区的Recycled目录下的过程。虽然我们独立的编写彻头彻尾的代码可以实现,但是却比较繁琐。我们可以调用windows api函数SHFileOperation来方便的实现,它的功能很多,涉及到文件的拷贝、剪切、删除等等,在本文中,我只讨论它的两个功能---将文件放入回收站和绝对删除。

  (二)编程示例;

  (第一步)启动vb6中文版建立一个标准exe工程,将窗体命名为"form1",从左边的工具箱中添加一个drivelistbox控件“dir1”,一个dirlistbox控件“dir1”,一个filelistbox控件“file1”,一个checkbox控件“optRecycle”,一commandbutton控件“cmddelete”,将以上控件调整到适当位置,双击窗体,写入以下代码:

VB code
  Option EXPlicit  Private Type SHFILEOPSTRUCT  hWnd As Long  wFunc As Long  pFrom As String  pTo As String  fFlags As Integer  fAborted As Boolean  hNameMaps As Long  sProgress As StringEnd Type’文件操作函数类型参数  Private Const FO_DELETE = &H3‘本参数代表删除Private Const FOF_ALLOWUNDO = &H40‘本参数表示将文件放入回收站  Private Declare Function SHFileOperation Lib _"shell32.dll" Alias "SHFileOperationA" _(lpFileOp As SHFILEOPSTRUCT) As Long ‘api函数声明  Public Sub ShellDeleteOne(sFile As String, ActionFlag As Long) ‘自定义文件删除操作函数ShellDeleteOne,第一个参数指定被删除的文件名,第二个参数指定是否放入回收站  Dim SHFileOp As SHFILEOPSTRUCTDim r As Long  sFile = sFile & Chr$(0)  With SHFileOp  .wFunc = FO_DELETE  .pFrom = sFile? .fFlags = ActionFlag ‘如果ActionFlag=0表示绝对删除,而ActionFlag=FOF_ALLOWUNDO表示放入回收站End With  r = SHFileOperation(SHFileOp)‘执行删除操作End Sub  Private Sub Dir1_Change()  File1.Path = Dir1.Path‘将目录列表框与文件列表框关联End Sub  Private Sub Drive1_Change()  On Error Resume Next ‘忽略错误  Dir1.Path = Drive1.Drive‘将驱动器列表框与目录列表框关联End Sub  Private Sub Form_Load()  Me.Caption = "回收站调用演示_ --zouherohttp://zouga.yeah.net"‘初始化程序标题  cmdDelete.Enabled = False ‘禁止删除按钮直到有文件被选中End Sub  Private Sub cmdDelete_Click()Dim r As LongDim file2Delete As StringDim fPath As StringDim ActionFlag As LongfPath = Dir1.Pathfile2Delete = File1.List(File1.ListIndex)‘记录文件名If Right(fPath, 1) $#@60;$#@62; "\" Then  fPath = fPath & "\"End If‘判断文件路径file2Delete = fPath & file2Delete ‘完整的文件名ActionFlag = 0& ‘默认为绝对删除If optRecycle.Value Then ActionFlag = FOF_ALLOWUNDO‘如果optRecycle被选中则将文件放入回收站ShellDeleteOne file2Delete, ActionFlag ‘调用自定义删除函数File1.Refresh‘刷新文件列表框cmdDelete.Enabled = File1.ListIndex $#@62; -1‘如果选定目录下没有文件或者没有选中文件,删除按钮被禁止End Sub  Private Sub File1_Click()  cmdDelete.Enabled = File1.ListIndex $#@62; -1End Sub
[解决办法]
  我们在编程实践中,经常需要涉及到文件的删除操作,而一般的程序语言中的删除指令是绝对删除的,即不将文件放入回收站,这给我们在设计更加具有windows风格的应用程序带来了一定的不便。

为了克服这个障碍,我们需要通过调用独立于编程环境以外的windows api函数来实现,以下是vb6的示例代码,在windows98中测试通过。它可以选择是否将文件删除到回收站。

  (一)编程原理;

  将文件删除到回收站的过程实际上就是,将被删除的文件加上原来存放位置信息、删除日期等信息后,移动到WINDOWS所在分区的Recycled目录下的过程。虽然我们独立的编写彻头彻尾的代码可以实现,但是却比较繁琐。我们可以调用windows api函数SHFileOperation来方便的实现,它的功能很多,涉及到文件的拷贝、剪切、删除等等,在本文中,我只讨论它的两个功能---将文件放入回收站和绝对删除。

  (二)编程示例;

  (第一步)启动vb6中文版建立一个标准exe工程,将窗体命名为"form1",从左边的工具箱中添加一个drivelistbox控件“dir1”,一个dirlistbox控件“dir1”,一个filelistbox控件“file1”,一个checkbox控件“optRecycle”,一commandbutton控件“cmddelete”,将以上控件调整到适当位置,双击窗体,写入以下代码:

VB code
  Option EXPlicit  Private Type SHFILEOPSTRUCT  hWnd As Long  wFunc As Long  pFrom As String  pTo As String  fFlags As Integer  fAborted As Boolean  hNameMaps As Long  sProgress As StringEnd Type’文件操作函数类型参数  Private Const FO_DELETE = &H3‘本参数代表删除Private Const FOF_ALLOWUNDO = &H40‘本参数表示将文件放入回收站  Private Declare Function SHFileOperation Lib _"shell32.dll" Alias "SHFileOperationA" _(lpFileOp As SHFILEOPSTRUCT) As Long ‘api函数声明  Public Sub ShellDeleteOne(sFile As String, ActionFlag As Long) ‘自定义文件删除操作函数ShellDeleteOne,第一个参数指定被删除的文件名,第二个参数指定是否放入回收站  Dim SHFileOp As SHFILEOPSTRUCTDim r As Long  sFile = sFile & Chr$(0)  With SHFileOp  .wFunc = FO_DELETE  .pFrom = sFile? .fFlags = ActionFlag ‘如果ActionFlag=0表示绝对删除,而ActionFlag=FOF_ALLOWUNDO表示放入回收站End With  r = SHFileOperation(SHFileOp)‘执行删除操作End Sub  Private Sub Dir1_Change()  File1.Path = Dir1.Path‘将目录列表框与文件列表框关联End Sub  Private Sub Drive1_Change()  On Error Resume Next ‘忽略错误  Dir1.Path = Drive1.Drive‘将驱动器列表框与目录列表框关联End Sub  Private Sub Form_Load()  Me.Caption = "回收站调用演示_ --zouherohttp://zouga.yeah.net"‘初始化程序标题  cmdDelete.Enabled = False ‘禁止删除按钮直到有文件被选中End Sub  Private Sub cmdDelete_Click()Dim r As LongDim file2Delete As StringDim fPath As StringDim ActionFlag As LongfPath = Dir1.Pathfile2Delete = File1.List(File1.ListIndex)‘记录文件名If Right(fPath, 1) $#@60;$#@62; "\" Then  fPath = fPath & "\"End If‘判断文件路径file2Delete = fPath & file2Delete ‘完整的文件名ActionFlag = 0& ‘默认为绝对删除If optRecycle.Value Then ActionFlag = FOF_ALLOWUNDO‘如果optRecycle被选中则将文件放入回收站ShellDeleteOne file2Delete, ActionFlag ‘调用自定义删除函数File1.Refresh‘刷新文件列表框cmdDelete.Enabled = File1.ListIndex $#@62; -1‘如果选定目录下没有文件或者没有选中文件,删除按钮被禁止End Sub  Private Sub File1_Click()  cmdDelete.Enabled = File1.ListIndex $#@62; -1End Sub 


[解决办法]
http://www.hackhome.com/InfoView/Article_109393.html
[解决办法]
LS那几位确实不是在回答你的问题 呵呵

每个盘的根目录下 有个以 RECYCLER 命名的文件夹
里面又有2个文件夹 是以当前用户的CLSID来命名的
这里面放着被删除的文件 文件名好象都被改变了
里面有个INFO文件 里面记录了 删除前的一些信息

我的XP SP2下 是上面这样子 其他就不知道了

你自己研究研究吧

读书人网 >VB

热点推荐