Seite 1 von 1

Dateien in den Papierkorb löschen (per API)

Verfasst: 11.02.2007 18:53
von AND51
Hallo!

Ich habe gerade eine Procedure geschrieben, die eine Datei in den Papierkob schiebt, anstatt sie endgültig zu löschen.
Damit man nicht in irgendwelchen alten PB-Archiven suchen muss oder auf diesen Threadhier umgeleitet wird, poste ich die Procedure hier nocheinmal, denn: Ich habe sie selbst geschrieben.

Code: Alles auswählen

Procedure recycleFile(file$, silent=#FOF_SILENT|#FOF_NOCONFIRMATION)
	Protected info.SHFILEOPSTRUCT
	file$+#NULL$+#NULL$
	With info
		\wFunc=#FO_DELETE
		\pFrom=@file$
		\fFlags=#FOF_ALLOWUNDO|silent
		ProcedureReturn (Not SHFileOperation_(info))
	EndWith
EndProcedure

Debug recycleFile("C:\Neu Textdokument.txt")
Rückgabewert:
Gibt 1 zurück, wenn erfolgreich, ansonsten 0.
Hinweise:
Laut MSDN ist es möglich, mehrere Dateien auf einmal zu löschen und/oder einen Fortschrittsdialog automatisch anzeigen zu lassen. Diese Procedure ist dafür ausgelegt nur 1 Datei zu verarbeiten. Ferner werden alle möglichen Dialoge ausgeblendet, die erscheinen könnten. (Siehe weiter unten "Silent Modus").

Die MSDN empfiehlt strengstens, lomplette Pfadangaben zu verwenden. Relative Pfadangaben könnten zu unerwarteten Ergebnissen führen.

Es soll auch möglich sein, Wildcards zu verwenden, es funktioniert!
Beispiel: recycleFile("C:\Kopie von *.txt")

Diese Funktion arbeitet genau so, als wenn ich manuell Dateien im Explorer lösche. Sollte man im Explorer eine schreibgeschütze Datei löschen wollen, wird man im Explorer gefragt "Schreibgeschützte Datei löschen?" kann man u. a. "Ja zu allen" auswählen. Auch beim Verwenden dieser Procedure kann das passieren, wenn man eine schreibgeschützte Datei auswählt, es wird dann automatisch "Ja zu allen" ausgewählt.

Getestet unter Win MCE (=XP Pro SP2).

Silent Modus:
Standardmäßig arbeitet die Procedure im "Silent Modus", es werden alle Dialogboxen ausgeblendet. Man setze den Parameter "silent" auf 0, um alle Diablogboxen anzeigen zu lassen.

Tut man dies, wird auch der normale Fortschrittsdialog wieder eingeblendet.