使用c#在recyclebin中列出文件名而不使用任何外部文件

我想有一个函数,它使用c#代码检索回收站中的文件名(在win 7上)。 框架似乎没有任何东西可以实现这一点。

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

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

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

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

如果在应用程序中添加引用C:\Windows\System32\Shell32.dll ,则可以轻松访问Recyle Bin中文件的文件名

例:

  using Shell32; public IEnumerable 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); } 

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

在此处输入图像描述