2013-08-06 58 views
3

我想要一个函数,它使用c#代码在回收站(在win 7上)中检索我的文件名。框架似乎没有什么可以包含来实现这一点。使用c#在recyclebin中列出文件名,而不使用任何外部文件

Directory.Getfiles()将无法​​正常工作吗?

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

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

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

+2

好吧,如果你在一些Delphi代码复制,也可能不会用C#编写... – feralin

+1

这是正确的,C++代码不会用C#编译器编译。你只能用C#编译器编译C#;因此名称(“C#编译器”)... – feralin

+1

@feedwall很多与Visual Studio兼容,并不意味着与Visual Studio兼容的每种语言都将使用C#编译器。弗拉林说:您只能用C#编译器编译C#。 – madbrendon

回答

3

如果在您的应用程序添加到基准C:\Windows\System32\Shell32.dll您可以轻松地访问该文件的文件名中Recyle斌

例子:

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); 
    } 

如果创建额外的文件困扰你,你可以嵌入它的可执行

enter image description here

+1

如果你不想额外的文件,将'Shell32'的属性设置为'Embed Iterop Types',这将在任何Win7机器上工作 –

+1

添加图片设置的位置,它应该在较旧的Windows版本上向后兼容,但是我可以'现在进行测试 –

相关问题