5

我想要一个使用 c# 代码检索回收站(在 win 7 上)中的文件名的函数。该框架似乎没有任何内容可以实现这一目标。

Directory.Getfiles()对它不起作用,不是吗?

我发现自己有一个使用“windows shell32 自动化”的代码,但这需要提供 interop.shell32.dll,它必须与我的应用程序一起重新分发。由于我的应用程序应该独立工作(只要用户计算机上存在 Net Framework 2),这个解决方案并不理想。这个解决方案对我来说似乎也不可靠,因为它使用 COM 自动化并且某些引用可能会失败或调用 Namespace(10) 可能会失败。我什至不确定 Namespace(10) 是否始终是回收站的正确文件夹。这段代码是我在这个问题上为 C# 找到的所有代码。

我在代码项目上找到了一个 Delphi 和另一个实现,但是如果我在我的 C# 项目中复制该代码,它实际上都是红色下划线,并且它不会编译。我不确定如何更正此代码以使其在 C# 中使用。在 pinvoke.net 上,我没有找到我必须使用的 windows 函数(SHQueryRecycleBin)的代码,但也许我必须使用更多函数才能从回收站中获取文件列表。

有没有人看过代码或任何想法?

4

1 回答 1

6

如果您C:\Windows\System32\Shell32.dll在应用程序中添加对的引用,您可以轻松访问回收站中文件的文件名

例子:

    using Shell32;

    public IEnumerable<string> GetRecycleBinFilenames()
    {
        Shell shell = new Shell();
        Folder recycleBin = shell.NameSpace(10);

        foreach (FolderItem2 recfile in recycleBin.Items())
        {
            // Filename
            yield return recfile.Name;

            // full recyclepath
            // yield return recfile.Path;
        }

        Marshal.FinalReleaseComObject(shell);
    }

如果创建的额外文件困扰您,您可以将其嵌入到可执行文件中

在此处输入图像描述

于 2013-08-06T04:01:45.307 回答