You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.Net编译错误:RecycleBin未声明,求解决办法

解决VB.Net中RecycleBin is not declared编译错误

问题原因

你遇到的错误核心是:当前使用的Windows API Code Pack版本中,RecycleBin类并非直接在Microsoft.WindowsAPICodePack.Shell命名空间下直接暴露,或该类在你安装的NuGet包版本中存在调整/缺失。此外你的代码还存在两个隐性问题:StringBuilder未实例化、循环内频繁弹窗会导致交互混乱。

修正方案

方案1:修复原代码的命名空间与实例化问题

先确保完整引用RecycleBin类,同时修复StringBuilder未初始化、属性获取安全性问题:

Imports Microsoft.WindowsAPICodePack.Shell
Imports System.Text

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' 完整指定RecycleBin类的命名空间路径,避免命名冲突
        Dim RecycledFiles As IEnumerable(Of ShellFile) = Microsoft.WindowsAPICodePack.Shell.RecycleBin.MasterBin.Files

        ' 必须实例化StringBuilder,否则会触发空引用异常
        Dim sb As New StringBuilder()
        For Each Item As ShellFile In RecycledFiles
            sb.AppendLine($"文件名: {Item.Name}")
            
            ' 使用系统标准属性名获取删除日期,避免本地化或版本兼容问题
            Dim deleteDateProp = Item.Properties.GetProperty("System.Recycle.DateDeleted")
            If deleteDateProp IsNot Nothing AndAlso deleteDateProp.ValueAsObject IsNot Nothing Then
                sb.AppendLine($"删除日期: {deleteDateProp.ValueAsObject.ToString()}")
            Else
                sb.AppendLine("删除日期: 无法获取")
            End If
            sb.AppendLine("---") ' 添加分隔线区分不同文件
        Next Item

        ' 循环结束后统一展示结果,避免频繁弹窗
        If sb.Length > 0 Then
            MsgBox(sb.ToString())
        Else
            MsgBox("回收站为空")
        End If
    End Sub
End Class

方案2:利用你已掌握的Shell32方式获取删除日期

既然你已经能通过SH.NameSpace(Shell32.ShellSpecialFolderConstants.ssfBITBUCKET)访问回收站,可直接用这种方式实现需求,无需依赖可能有问题的RecycleBin类:

Imports Shell32
Imports System.Text

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim recycleBin As Folder = New Shell().NameSpace(ShellSpecialFolderConstants.ssfBITBUCKET)
        Dim sb As New StringBuilder()

        If recycleBin.Items.Count = 0 Then
            MsgBox("回收站为空")
            Return
        End If

        For Each item As FolderItem In recycleBin.Items
            sb.AppendLine($"文件名: {item.Name}")
            ' Shell32中删除日期对应的属性索引为2(不同系统版本可通过recycleBin.GetDetailsOf(item, 2)验证)
            Dim deleteDate As String = recycleBin.GetDetailsOf(item, 2)
            sb.AppendLine($"删除日期: {deleteDate}")
            sb.AppendLine("---")
        Next

        MsgBox(sb.ToString())
    End Sub
End Class

关键注意事项

  • 确认WindowsAPICodePack-Core和WindowsAPICodePack-Shell NuGet包版本匹配,建议升级到最新稳定版,部分旧版本可能未包含RecycleBin类。
  • 访问属性时优先使用系统标准属性名(如System.Recycle.DateDeleted),而非自定义字符串,避免因系统本地化或版本差异导致获取失败。

内容的提问来源于stack exchange,提问作者rajeev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:45:58