![]() |
SHFileOp FO_DELETE fehlerhaft
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
ich habe folgendes Problemchen - was für mich nicht ganz nachvollziehbar ist: Ich lösche per ShellApi einzeln Dateien folgenden code verwende ich momentan:
Delphi-Quellcode:
Die Datei existiert, und ist nicht geschützt oder in Benutzung...
procedure DeleteFileToRecycle(dateien: string);
var SHFileOP: TSHFileOpStruct; begin with SHFileOp do begin Wnd := Application.Handle; wFunc := FO_DELETE; // zum löschen fFlags := FOF_ALLOWUNDO; // Ermöglicht eine Umkehrung der letzten Operation pFrom := PChar(dateien + #0); end; SHFileOperation(SHFileOp); end; ... Aufruf : DeleteFileToRecycle('D:\Delphi\Lizenz-Switch\Testdaten\Lizenz.e15' + #0); bei 3 von 4 Versuchen bekomme ich die angehängte Fehlermeldung, d.h. manchmal geht es meistens nicht es ist aber auch kein muster erkennbar um das ganze nachzustellen :gruebel: gemäß der code libary habe ich schon andere kombinationen versucht (speziell die Flags) > gleiches ergebnis ![]() mein ziel ist es lediglich eine Datei in den Papierkorb zu verschieben um es ggf. wiederherzustellen (es werden nie mehrere oder geöffnete dateien gelöscht) es gibt auch keine Rechteprobleme da alles lokal ausgeführt wird und Hauptbenutzerrechte vorliegen ich hoffe ihr könnt mir helfen mfG TeeKay |
Re: SHFileOp FO_DELETE fehlerhaft
Hi,
versuch mal beim Aufruf das #0 zu entfernen. Sonst hättest Du ja 2 von den #0 ... mfG mirage228 |
Re: SHFileOp FO_DELETE fehlerhaft
Delphi-Quellcode:
APIs mögen keine uninitialisierten Strukturen.
FillChar(SHFileOP, SizeOf(TSHFileOpStruct), 0);
|
Re: SHFileOp FO_DELETE fehlerhaft
Moin Mirage,
da der Parameter auch mehrere, jeweils mit #00 getrennte, Dateien/Pfade verarbeiten kann, muss er mit #00#00 abgeschlossen werden. |
Re: SHFileOp FO_DELETE fehlerhaft
Zitat:
mfG mirage228 |
Re: SHFileOp FO_DELETE fehlerhaft
warum eigentlich "#00" und nicht einfach "#0"? Gibts da nen Unterschied den ich noch nicht kenne? Ansonsten wäre es ja nur zusätzlicher Schreibaufwand.
|
Re: SHFileOp FO_DELETE fehlerhaft
Durch einfache #0 werden mehrere Dateien getrennt (wenn man mehrere Dateien übergibt). Das #0#0 signalisiert, dass die Liste nun zu Ende ist ;)
mfG mirage228 |
Re: SHFileOp FO_DELETE fehlerhaft
Moin SirThornberry,
das mit dem #00 ist eine "dumme" Angewohnheit von mir. Eigentlich benutze ich diese Schreibweise nur für die Zeichen <= 32, so dass ich mit zwei Stellen auskomme, auch wenn drei möglich wären, und damit die Breite immer gleich bleibt nehme ich immer zwei Zeichen, ggf. dann eben mit führender Null. Z.B. #09 für Tabulator. Dem Compiler ist es egal, und für mich ist es besser lesbar ;-) |
Re: SHFileOp FO_DELETE fehlerhaft
Zitat:
Delphi-Quellcode:
danke für eure Hilfe
procedure DeleteFileToRecycle(dateien: string);
var SHFileOP: TSHFileOpStruct; begin FillChar(SHFileOP, SizeOf(TSHFileOpStruct), 0); with SHFileOp do begin Wnd := Application.Handle; wFunc := FO_DELETE; fFlags := FOF_ALLOWUNDO; pFrom := PChar(dateien + #0); end; SHFileOperation(SHFileOp); end; mfG TeeKay |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz