【问题标题】:Deleting a single item FROM recycle bin从回收站中删除单个项目
【发布时间】:2009-07-13 13:52:39
【问题描述】:

在 C#(可能是互操作)中有什么方法可以永久删除回收站中的特定文件?

在互联网上搜索时,我只找到了删除 TO 回收站而不是 FROM 的方法。 我也不想清空整个垃圾箱,只清空一个特定文件。特定项目已在回收站中。

我该怎么做?

编辑:

  1. 我自己没有把文件放在那里,我的程序也没有放在那里。其他人这样做了,所以我无法控制。
  2. Windows 搜索能够以某种方式找到我的文件...?!?

我发现了另一件事,我实际上可以在 C:\RECYCLER 中找到一个文件扩展名相同但名称不同的文件。那么如何判断这是否真的是我要查找的文件呢?

【问题讨论】:

  • 你怎么知道它是你要找的文件?内容、大小等?
  • 1.相同的扩展名 2. 清除了所有内容,包括隐藏的回收站文件夹,只删除了我的文件瞧,它是那里唯一的文件

标签: c# delete-file recycle-bin


【解决方案1】:

您需要参考:

using Shell32;

代码:

var shl = new Shell();

// Get recycle folder
Folder recycler = shl.NameSpace(10);

FolderItems items = recycler.Items();
for (int i = 0; i < items.Count; i++)
{
    try
    {
        FolderItem fi = items.Item(i);
        string fileName = recycler.GetDetailsOf(fi, 0);
        string filePath = recycler.GetDetailsOf(fi, 1);
        string recyleDate = recycler.GetDetailsOf(fi, 2);
        
        if (fileName == "your file/folder")
        {
            // check if chosen item is a folder
            if (fi.IsFolder)
            {
                Directory.Delete(fi.Path, true);
            }
            else
            {
                File.Delete(fi.Path);
            }
        }
    }
    catch (Exception exc)
    {
        ...
    }
}

希望这可能会有所帮助。对我有用。

【讨论】:

    【解决方案2】:

    我没试过,但是你可以在每个单元的隐藏文件夹“RECYCLER”中搜索你要删除的项目,然后删除它。

    【讨论】:

    • Windows Search 实际上可以做到这一点,但由于某些原因,GetFiles() 返回一些奇怪的其他文件,甚至不在我的回收站中。我似乎无法获得我真正要寻找的文件 不幸的是......
    • 对于回收站中的每个项目,Shell 至少存储一个包含元数据的附加文件。因此,要从回收站中删除一个项目,需要发现所有相关信息。不过,这是一个实现细节,并没有正式记录。只删除移到那里的文件系统对象总是会使回收站处于不一致的状态。
    【解决方案3】:

    这可能是一个愚蠢的问题,但文件是否因为您的程序放在那里而进入回收站?如果是这样,您可以使用正常的文件操作删除文件并完全绕过回收站。

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2017-04-18
      相关资源
      最近更新 更多