繁体   English   中英

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

[英]How to delete all the files in recycle bin using 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 驱动器执行相同操作时,我收到相同的错误消息。 我已经以管理员身份登录。 请帮我找出问题所在。

该目录有意隐藏在 Windows 资源管理器中; 它是回收站工作方式的内部机制(例如,您可以从不同目录回收具有相同名称的文件)。 资源管理器中的“清空回收站”按钮可能只是清空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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM