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

如何使用vb.net删除回收站中的所有文件?,vb.net,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 St

我在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-305831685-1004'被拒绝”。当我对E-drive执行相同操作时,会收到相同的错误消息。我已经以管理员身份登录。请帮我找出问题。

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

您必须使用非托管代码(Windows shell),因为这是一个系统级函数,.NET framework不包装(管理):

资料来源:

“清空回收站-VB.NET代码”


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

以管理员身份登录可能没有帮助-您需要以管理员身份运行应用程序。搜索“提升的特权”。
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