2015-02-04 13 views
6

Desidero un pulsante WPF che apra explorer.exe in Windows 7 | 8 direttamente nel "Cestino". Questo perché la mia app cancella molti file e voglio fornire all'utente un modo rapido per ripristinare i file. Gli argomenti della riga di comando non funzionano, probabilmente perché il "Cestino" è una directory virtuale. Ho provato a utilizzare "$ Recycle Bin". Explorer.exe/root, dove a è un file virtuale fallisce. Cercare di proteggere lo spazio in Recycle \ Bin non sembra funzionare altrettanto bene.Come C# a livello di programmazione o riga di comando open explorer.exe nel "Cestino"

Ecco un codice funzionante di Scott Powell che ho provato e sto usando. Grazie 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

meglio ci mostrano un certo codice – chouaib

+0

Grazie a Scott Powell per il suggerimento sopra per utilizzare Account Management per recuperare il SID ed Explorer aperta nel vero directory invece che la directory virtuale. –

+0

per favore non inserire il codice nei commenti, [modifica la tua domanda] (http://stackoverflow.com/posts/28311915/edit) e inserisci degli esempi di codice. –

risposta

5

Si potrebbe eseguire il seguente comando al fine di raggiungere questo obiettivo,

start shell:RecycleBinFolder 

Dal vostro codice C# si potrebbe usare,

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

qualcuno ha provato questo? –

+0

Sì, l'ho fatto, basta incollarlo nel prompt dei comandi. –

0

Cestino si trova in una directory nascosta denominata \ $ Recycle.Bin \% SID%, dove% SID% è il SID dell'utente che ha eseguito l'eliminazione.

Quindi in base al largo di questo, siamo in grado di fare: Aggiungere un riferimento .NET per System.DirectoryServices.AccountManagement

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

dovrebbero essere in grado di accedere ora alla directory appropriata Cestino in base al largo account utente che è in esecuzione. Lavorare in Windows 7 (testato).

+0

Funziona come un fascino! private void ExploreTrashBin() { Stringa str_RecycleBinDir = String.Format (@ "C: \ $ Recycle.Bin \ {0}", UserPrincipal.Current.Sid); Successo booleano = processo. Start ("explorer.exe", str_RecycleBinDir); } –

+0

Non mi piace, basandoti su un dettaglio di implementazione del cestino che potrebbe cambiare in una futura versione di Windows. – Dai

+0

@Dai Onestamente dubito che Microsoft cambierà qualcosa del genere in una versione futura. Anche se dovesse cambiare, è una linea di codice che dovrebbe essere aggiornata, il gioco è fatto, tutto qui. Un cambiamento molto semplice. –

1

E 'già implementato in Microsoft.VisualBasic.FileIO.FileSystem classe .Net (in modo da C# supporta in modo nativo l'uso di this).

In questo modo, non è necessario eseguire il comando di shell : basta cancellare file/cartelle programmazione come se fatto in modo interattivo con Windows Explorer!

using Microsoft.VisualBasic.FileIO; 

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

enter image description here

+2

E non lasciare che lo spazio dei nomi 'Microsoft.VisualBasic' ti scoraggi. Va perfettamente bene usare il codice C#. –

Problemi correlati