2015-02-04 4 views
6

Ich möchte eine WPF-Taste, die explorer.exe in Windows 7 öffnen | 8 direkt in den "Papierkorb". Dies liegt daran, dass meine App viele Dateien löscht und ich dem Benutzer eine schnelle Möglichkeit zum Wiederherstellen von Dateien bereitstellen möchte. Die Befehlszeilenargumente funktionieren nicht, möglicherweise weil der "Papierkorb" ein virtuelles Verzeichnis ist. Ich habe versucht, "$ Papierkorb" zu verwenden. Explorer.exe/root, wobei a eine virtuelle Datei ausfällt. Der Schutz des Speicherplatzes in Recycle \ Bin scheint nicht so gut zu funktionieren.Wie C# programmatisch oder Befehlszeile öffnen explorer.exe in den "Papierkorb"

Hier ist Code von Scott Powell, den ich getestet habe und verwende. Danke Scott @

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 (); 
     } 
+2

besser zeigen uns einige Codes – chouaib

+0

Dank Scott Powell für den obigen Vorschlag Account Management zu verwenden, um den SID und öffnen Sie den Explorer in dem realen Verzeichnis anstelle des virtuellen Verzeichnisses zu erholen. –

+0

Bitte schreiben Sie keinen Code in Kommentare, [bearbeiten Sie Ihre Frage] (http://Stackoverflow.com/posts/28311915/edit) und setzen Sie dort Codebeispiele. –

Antwort

5

Sie können folgenden Befehl ausführen, um dies zu erreichen,

start shell:RecycleBinFolder 

Von Ihrem C# -Code können Sie verwenden, wird

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

hat jemand das versucht? –

+0

Ja, ich habe es einfach in die Eingabeaufforderung eingefügt. –

0

Papierkorb befindet sich in ein verstecktes Verzeichnis mit dem Namen \ $ Recycle.Bin \% SID%, wobei% SID% die SID des Benutzers ist, der den Löschvorgang ausgeführt hat.

aus diesem So basiert, was wir tun können: einen .NET Verweis auf System.DirectoryServices.AccountManagement

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

der Lage sein, hinzufügen Jetzt sollte das richtige Papierkorb-Verzeichnis basierte weg, das Benutzerkonto zuzugreifen, ist Laufen. Unter Windows 7 arbeiten (getestet).

+0

Funktioniert wie ein Charme! private void ExploreTrashBin() { Zeichenfolge str_RecycleBinDir = String.Format (@ "C: \ $ Recycle.Bin \ {0}", UserPrincipal.Current.Sid); Boolescher Erfolg = Prozess. Start ("explorer.exe", str_RecycleBinDir); } –

+0

Ich mag das nicht - Sie basieren auf einem Implementierungsdetail des Papierkorbs, der sich in einer zukünftigen Windows-Version ändern könnte. – Dai

+0

@Dai Ich bezweifle ehrlich Microsoft würde so etwas in einer zukünftigen Version ändern. Selbst wenn es sich ändert, ist es eine Codezeile, die aktualisiert werden müsste, das ist alles. Eine sehr einfache Änderung. –

1

Es ist bereits in in .Net Microsoft.VisualBasic.FileIO.FileSystem Klasse implementiert wird (so C# unterstützt nativ die Verwendung von this).

Auf diese Weise Sie nicht laufen Shell-Befehl benötigen: nur Dateien/Ordner programmatisch löschen, als ob interaktiv mit Windows Explorer fertig!

using Microsoft.VisualBasic.FileIO; 

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

enter image description here

+2

Und lassen Sie sich nicht durch den Namespace 'Microsoft.VisualBasic' abschrecken. Es ist völlig in Ordnung, C# -Code zu verwenden. –

Verwandte Themen