Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi SHFileOp FO_DELETE fehlerhaft (https://www.delphipraxis.net/32215-shfileop-fo_delete-fehlerhaft.html)

teekay 20. Okt 2004 14:05


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:
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);
Die Datei existiert, und ist nicht geschützt oder in Benutzung...

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
http://www.delphipraxis.net/viewtopic.php?t=1451

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

mirage228 20. Okt 2004 18:30

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

NicoDE 20. Okt 2004 18:36

Re: SHFileOp FO_DELETE fehlerhaft
 
Delphi-Quellcode:
  FillChar(SHFileOP, SizeOf(TSHFileOpStruct), 0);
APIs mögen keine uninitialisierten Strukturen.

Christian Seehase 20. Okt 2004 18:52

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.

mirage228 20. Okt 2004 18:57

Re: SHFileOp FO_DELETE fehlerhaft
 
Zitat:

Zitat von Christian Seehase
Moin Mirage,

da der Parameter auch mehrere, jeweils mit #00 getrennte, Dateien/Pfade verarbeiten kann, muss er mit #00#00 abgeschlossen werden.

Ups, hast recht! War wohl etwas zu voreilig... :oops:

mfG
mirage228

SirThornberry 20. Okt 2004 19:17

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.

mirage228 20. Okt 2004 19:19

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

Christian Seehase 20. Okt 2004 20:42

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 ;-)

teekay 21. Okt 2004 07:26

Re: SHFileOp FO_DELETE fehlerhaft
 
Zitat:

Zitat von NicoDE
Delphi-Quellcode:
  FillChar(SHFileOP, SizeOf(TSHFileOpStruct), 0);
APIs mögen keine uninitialisierten Strukturen.

ich glaub ich war mal wieder zu faul - speziell beim Initialisieren muss ich meine Gewohnheiten verbessern so funktioniert es:

Delphi-Quellcode:
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;
danke für eure Hilfe

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