如何使用vb.net删除回收站中的所有文件?

时间:2014-08-11 11:44:01

标签: vb.net

我在vb.net中使用以下代码来删除回收站的内容:

 Sub DeleteFilesFromRecycleBin(Folder As String)
    If Directory.Exists(Folder) Then
        For Each _file As String In Directory.GetFiles(Folder)

            File.Delete(_file)

        Next
        For Each _folder As String In Directory.GetDirectories(Folder)

            DeleteFilesFromRecycleBin(_folder)
        Next

    End If

End Sub

函数调用语句:DeleteFilesFromRecycleBin(" C:\ $ Recycle.Bin")

现在主要的问题是每当我调用C盘的功能时,它都会工作并删除从C盘中删除的所有文件。但是,每当我使用相同的函数删除使用函数调用语句从D盘中删除的文件时:DeleteFilesFromRecycleBin(" D:\ $ Recycle.Bin"),我收到一条错误消息:访问路径' D:\ $ Recycle.Bin \ S-1-5-21-3547970170-1955488480-3058331685-1004'被拒绝”。当我使用E驱动器执行相同操作时,我收到相同的错误消息。我已经以管理员身份登录。请帮我弄清楚问题。

1 个答案:

答案 0 :(得分:2)

该目录有意隐藏在Windows资源管理器中;它是回收站工作原理的内部(例如,您可以从不同的目录中回收具有相同名称的文件)。资源管理器中的“空Recyle Bin”按钮可能只是空D:\$Recycle.Bin\S-1-5-21-3547970170-1955488480-3058331685-1004,但这不是你的问题。

您必须使用非托管代码(Windows shell),因为这是.NET框架未包装(管理)的系统级功能:

Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias
"SHEmptyRecycleBinA" (ByVal hWnd As Int32, ByVal pszRootPath As String,
ByVal dwFlags As Int32) As Int32
Private Declare Function SHUpdateRecycleBinIcon Lib "shell32.dll" () As
Int32

Private Const SHERB_NOCONFIRMATION = &H1
Private Const SHERB_NOPROGRESSUI = &H2
Private Const SHERB_NOSOUND = &H4

Private Sub EmptyRecycleBin()
    SHEmptyRecycleBin(Me.Handle.ToInt32, "", SHERB_NOCONFIRMATION + SHERB_NOSOUND)
    SHUpdateRecycleBinIcon()
End Sub

来源:

http://bytes.com/topic/visual-basic-net/answers/509609-empty-recycle-bin-vb-net-code“清空回收站 - VB.NET代码”

一般情况下,出于可靠性原因(.NET无法保护您)使用非托管代码是不好的,因为如果您想在不同的平台上运行程序(例如,通过Mono),您可能会很难 - shell32.dll仅限Windows。