Derzeit verwende ich die folgende Funktion
file.Delete();
Aber wie kann ich diese Funktion verwenden, um eine Datei in den Papierkorb zu senden, anstatt sie sofort zu löschen?
c#
recycle-bin
muttley91
quelle
quelle
.NET Matters: IFileOperation in Windows Vista
und befindet sich imColumns
Ordner.FOFX_RECYCLEONDELETE = 0x00080000
die Operationsflags hinzufügen , und dieses Flag wird nur unter Windows 8 oder höher unterstützt.Antworten:
HINWEIS: Dies funktioniert auch nicht mit interaktiven Nicht-UI-Apps wie Windows Services
Dieser Wrapper bietet Ihnen die erforderlichen Funktionen:
quelle
Verwenden Sie FileSystem.DeleteFile und geben Sie die richtige RecycleOption an .
Dies funktioniert zwar mit interaktiven UI-Apps, jedoch nicht mit interaktiven Apps ohne UI wie einer Windows-Dienst-App.
quelle
Microsoft.VisualBasic.FileIO.FileSystem
ist im Grunde das gleiche wie in dem hier geposteten Beispiel mitSHFileOperation
.IL
mir nichts aus. Die VB-Assembly ruft übrigens dieselbe WinAPI-Funktion auf.Microsoft.VisualBasic.Compatibility
zufällig verwechselt ? Das würde ich vermeiden. Es scheint nicht so, als würde es bald veraltet sein (es wird in der RDL-Berichts-Engine usw. verwendet).Von MSDN :
Fügen Sie einen Verweis auf die Microsoft.VisualBasic-Assembly hinzu. Die benötigte Klasse befindet sich in dieser Bibliothek.
Fügen Sie diese using-Anweisung oben in die Datei ein
using Microsoft.VisualBasic.FileIO
.Verwenden Sie
FileSystem.DeleteFile
eine Datei zu löschen, hat es die Option Papierkorb zu spezifizieren oder nicht.Verwenden Sie
FileSystem.DeleteDirectory
diese Option, um ein Verzeichnis mit der Option zu löschen, dass es an den Papierkorb gesendet werden soll oder nicht.quelle
Die folgende Lösung ist einfacher als die anderen:
Mit dieser Bibliothek können Sie andere Funktionen des Papierkorbs verwenden.
Vergessen Sie zunächst nicht, die Bibliothek "Microsoft Shell Controls And Automation" (aus dem COM-Menü) hinzuzufügen, um den
Shell32
Namespace verwenden zu können. Es wird dynamisch mit Ihrem Projekt verknüpft, anstatt zusammen mit Ihrem Programm kompiliert zu werden.quelle
10
durchShell32.ShellSpecialFolderConstants.ssfBITBUCKET
. Es kann erwähnenswert sein, den zweiten Parameter inMoveHere
Bezug auf Optionen wie 64 zu erwähnen ("Informationen rückgängig machen, wenn möglich"). Das Verknüpfen einiger Dokumentationsquellen von MSDN wäre ein guter Abschluss.Leider müssen Sie auf die Win32-API zurückgreifen, um eine Datei aus dem Papierkorb zu entfernen. Versuchen Sie den folgenden Code, der auf diesem Beitrag basiert . Es nutzt die generische
SHFileOperation
Funktion für Dateisystemoperationen über die Windows-Shell.Definieren Sie Folgendes (in einer Utilities-Klasse ist dies wahrscheinlich am besten).
Und um damit eine Datei zu löschen und sie in den Papierkorb zu senden, möchten Sie Folgendes:
quelle
shf.pFrom = @"C:\test.txt";
falsch ist - pFrom muss doppelt nullterminiert sein. Sie sollten\0
in der Datei hinzufügenshf.pFrom = "C:\\text.txt\0";
. Siehe docs.microsoft.com/en-us/windows/desktop/api/shellapi/…Sie können DllImport
SHFileOperation
, um dies zu tun.quelle
Hierfür gibt es eine eingebaute Bibliothek .
Fügen Sie zuerst die Referenz Microsoft.VisualBasic hinzu. Fügen Sie dann diesen Code hinzu:
Ich habe das hier gefunden .
quelle
Ich verwende diese Erweiterungsmethode, dann kann ich einfach eine DirectoryInfo oder FileInfo verwenden und diese löschen.
Ein Beispiel, wie man es nennt, könnte sein:
quelle