从回收站中删除单个项目

3
有没有办法在C#中(可能是互操作)永久删除回收站中的特定文件?
在网上搜索时,我只找到了将文件删除到回收站而不是从回收站中删除的方法。我也不想清空整个回收站,只想删除一个特定的文件。特定的项目已经在回收站中。
我该怎么做?
编辑:
1.文件不是我自己或我的程序放在回收站中的。别人这样做了,所以我无法控制它。
2.Windows搜索不知何故能够找到我的文件......?!?
我发现另一件事,我实际上可以在C:\ RECYCLER中找到具有相同文件扩展名但名称不同的文件。那么我怎么知道那是否真的是我要找的文件?

你如何确定这是你要找的文件?内容、大小等方面吗? - Jesse Vogt
  1. 相同的扩展名
  2. 清除了所有内容,包括隐藏的回收站文件夹,只删除了我的文件。嘿,那是唯一存在的文件。
- eric
3个回答

3

您需要引用:

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)
    {
        ...
    }
}

希望这对你有所帮助。对我来说有效。


0
我从未尝试过,但你可以在每个设备都有的隐藏文件夹“RECYCLER”中搜索要删除的项目,并将其删除。

Windows搜索实际上可以做到这一点,但由于某些原因,GetFiles()返回一些奇怪的其他文件,甚至不在我的回收站中。 我似乎找不到我真正想要的文件。 不幸的是... - eric
对于回收站中的每个项目,Shell 都会存储至少一个包含元数据的附加文件。因此,要从回收站中删除项目,需要找到所有相关信息。尽管如此,这只是一项实现细节,并未正式记录。仅删除被移动到回收站的文件系统对象将不可避免地使回收站处于不一致状态。 - IInspectable

-2
这可能是一个愚蠢的问题,但是文件是否因为您的程序而被放入回收站了?如果是这样,您可以使用普通文件操作直接删除文件,从而绕过回收站。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接