Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过编程或命令行将explorer.exe打开到;回收站“;_C#_Wpf_Windows - Fatal编程技术网

C# 如何通过编程或命令行将explorer.exe打开到;回收站“;

C# 如何通过编程或命令行将explorer.exe打开到;回收站“;,c#,wpf,windows,C#,Wpf,Windows,我想要一个WPF按钮,可以在Windows 7 | 8中直接打开explorer.exe到“回收站”。这是因为我的应用程序会删除很多文件,我想为用户提供一种快速恢复文件的方法。命令行参数不起作用,可能是因为“回收站”是一个虚拟目录。我试过使用“$回收站”。Explorer.exe/root,其中a是虚拟文件失败。试图保护回收站中的空间似乎也不起作用 下面是我测试并正在使用的Scott Powell的工作代码。 谢谢你,斯科特@ private void ExploreTrashBin (

我想要一个WPF按钮,可以在Windows 7 | 8中直接打开explorer.exe到“回收站”。这是因为我的应用程序会删除很多文件,我想为用户提供一种快速恢复文件的方法。命令行参数不起作用,可能是因为“回收站”是一个虚拟目录。我试过使用“$回收站”。Explorer.exe/root,其中a是虚拟文件失败。试图保护回收站中的空间似乎也不起作用

下面是我测试并正在使用的Scott Powell的工作代码。 谢谢你,斯科特@

    private void ExploreTrashBin ( )
        {
        String str_RecycleBinDir = String.Format(@"C:\$Recycle.Bin\{0}", UserPrincipal.Current.Sid);
        Process . Start ( "explorer.exe" , str_RecycleBinDir );
        }
    private void TrashBin_Button_Click ( object sender , RoutedEventArgs e )
        {
        ExploreTrashBin ( );
        }

为了实现这一点,您可以执行以下命令:

start shell:RecycleBinFolder
从你可以使用的C代码中

System.Diagnostics.Process.Start("explorer.exe", "shell:RecycleBinFolder");

回收站位于名为\$Recycle.Bin\%SID%的隐藏目录中,其中%SID%是执行删除的用户的SID

基于此,我们可以: 添加对System.DirectoryServices.AccountManagement的.NET引用

string str_RecycleBinDir = UserPrincipal.Current.Sid;
Process.Start("explorer.exe","C:\$Recycle.Bin\" + str_RecycleBinDir);

现在应该能够根据正在运行的用户帐户访问正确的回收站目录。在Windows 7中工作(已测试)。

它已在.Net中的Microsoft.VisualBasic.FileIO.FileSystem类中实现(因此C#本机支持使用)

这样,您就不需要运行shell命令:只需以编程方式删除文件/文件夹,就像使用Windows资源管理器以交互方式删除文件/文件夹一样

using Microsoft.VisualBasic.FileIO;

FileSystem.DeleteFile(...)
FileSystem.DeleteDirectory(...)

最好向我们展示一些代码感谢Scott Powell提出的上述建议,即使用帐户管理来恢复SID,并在真实目录而不是虚拟目录中打开资源管理器。请不要将代码放在注释中,并将代码示例放在注释中。Scott Chamberlain:doneWorks就像一个魔咒!私有void ExploreTrashBin(){String str\u recyclebinir=String.Format(@“C:\$Recycle.Bin\{0}”,UserPrincipal.Current.Sid);Boolean suces=Process.Start(“explorer.exe”,str\u recyclebinir);}我不喜欢这样-你是基于回收站的一个实现细节,这个细节在未来的Windows版本中可能会改变。@Dai我真的怀疑微软在未来的版本中会改变这样的东西。即使它真的发生了变化,也需要更新一行代码,仅此而已。一个非常简单的更改。不要让
Microsoft.VisualBasic
名称空间让您感到不快。从C#代码中使用是非常好的。