【问题标题】:list filenames in the recyclebin with c# without using any external files使用 c# 列出回收站中的文件名,而不使用任何外部文件
【发布时间】:2013-08-06 03:34:52
【问题描述】:

我想要一个使用 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) 的代码,但也许我必须使用更多函数才能从回收站获取文件列表。

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

【问题讨论】:

  • 好吧,如果你复制了一些 Delphi 代码,那可能无法用 C# 编译...
  • 没错,C++ 代码不会用 C# 编译器编译。您只能使用 C# 编译器编译 C#;因此名称(“C# 编译器”)...
  • @feedwall 很多都与 Visual Studio 兼容,这并不意味着与 Visual Studio 兼容的每种语言都将使用 C# 编译器。正如feralin所说;您只能使用 C# 编译器编译 C#。

标签: c# file list recycle-bin


【解决方案1】:

如果您在应用程序中添加引用 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);
    }

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

【讨论】:

  • Shell32的属性设置为Embed Iterop Types如果你不想要额外的文件,这将适用于任何Win7机器
  • 添加了设置位置的图片,它应该在旧的 Windows 版本上向后兼容,但我现在无法测试
猜你喜欢
  • 1970-01-01
  • 2010-10-29
  • 2020-05-14
  • 1970-01-01
  • 2019-10-25
  • 2017-11-11
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
相关资源
最近更新 更多