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 File mit SHFileOperation in Papierkorb versch. geht nicht (https://www.delphipraxis.net/25917-file-mit-shfileoperation-papierkorb-versch-geht-nicht.html)

Lefko 14. Jul 2004 21:54


File mit SHFileOperation in Papierkorb versch. geht nicht
 
Hi,
Ich hab des Katers (in manchen Kreisen auch als "Sakura" o.Ä bekannt) function "DoFileWork" aus der CodeLibrary verwendet, jedoch hab ich da mal ne Frage zu den Parametern FOF_ALLOWUNDO etc.

Ich will mit folgendem Code ein paar Dateien, die in einer Listbox stehen, in den Papierkorb verschieben (so, dass man sie notfalls noch wiederherstellen kann):

sakuras function:
Delphi-Quellcode:
function DoFileWork(aOperation: FILEOP_FLAGS; aFrom, aTo: AnsiString;
                    Flags: FILEOP_FLAGS): Integer;
var FromPath, ToPath: AnsiString;
    SHFileOpStruct: TSHFileOpStruct;
begin
FromPath := aFrom + #0#0;
ToPath := aTo + #0#0;
with SHFileOpStruct do
 begin
  Wnd := Application.Handle;
  wFunc := aOperation;
  pFrom := PAnsiChar(FromPath);
  if ToPath <> ''
    then pTo := PAnsiChar(ToPath)
    else pTo := nil;
  fFlags := Flags;
 end;
Result := SHFileOperationA(SHFileOpStruct);
end;
Meine Verwendung:
Delphi-Quellcode:
procedure TForm3.Dateilschen1Click(Sender: TObject); //Dateilschen1 ist ein PopUp-MenuItem
var a : integer;
    s : string;
begin
if MessageDlg('Datei(en) wirklich endgültig löschen?', mtConfirmation, [mbYes, mbNo], 0) = idYes
  then
   begin
    //#0 immer dazwischensetzen
    s := '';
    if LbFiles.SelCount > 1
      then
       begin
        for a := 0 to LbFiles.SelCount-1 do
         s := s + LbFiles.Items[LbFiles.itemindex-(LbFiles.SelCount-1)+a] + #0;
        s := copy(s, 0, length(s)-1); //<--- letztes #0 entfernen
       end
      else s := LbFiles.Items[LbFiles.ItemIndex];

    DoFileWork(FO_DELETE, s, '', FOF_NOCONFIRMATION); //Das geht nicht!!
    LbFiles.DeleteSelected;
   end;
end;

Problem dabei: Die Dateien sind zwar weg, aber er hat sie nicht in den Papierkorb verschoben, der ist leer :gruebel:
Wenn ich statt FOF_NOCONFIRMATION aber FOF_ALLOWUNDO nehme, dann sind die Dateien drin, wie sie sollen, nur will ich nicht immer bestätigen müssen!

Woran liegt das?

Luckie 14. Jul 2004 22:04

Re: File mit SHFileOperation in Papierkorb versch. geht nich
 
FOF_NONCONFIRMATION or FOF_ALLOWUNDO

Lefko 14. Jul 2004 23:21

Re: File mit SHFileOperation in Papierkorb versch. geht nich
 
ah, alles klar, eigentlich seeeehr naheliegend... :zwinker:

Lefko 14. Jul 2004 23:25

Re: File mit SHFileOperation in Papierkorb versch. geht nich
 
da fällt mir noch ein:

Manchmal funktioniert die Dateioperation ja nicht, weil z.B. die Datei geöffnet ist und deshalb nicht verschoben werden kann. Kann man (etwa mit GetLastError) herausfinden, WESHALB der Fehler aufgetreten ist? Also damit ich in das Prog noch reinschreiben kann "Datei xyz konnte nicht verschoben werden, weil die Datei geöffnet ist" oder so?

Ich hab mal probiert, mir GetLastError anzeigen zu lassen, es war aber immer 0, auch wenn solch ein Fehler aufgetreten ist!

Captnemo 22. Okt 2015 13:56

AW: File mit SHFileOperation in Papierkorb versch. geht nicht
 
Ich ziehe mal dieses Thema wieder hoch, da sich meine Frage auf genau dieses Thema auch bezieht.

Bekannt ist ja, dass eine Datei, die auf einem Netzlaufwerk (und somit meistens auch auf einem anderen Rechner) beim Löschen eben NICHT in den Papierkorb wandert, auch wenn man das so angibt.

Nun hätte ich das aber gerne.

Meine Frage, gibt es dazu eine Möglichkeit das gleich über die Api machen zu lassen, oder muss man halt sie halt selber dort hin kopieren und sie dann halt löschen?

Sir Rufo 22. Okt 2015 15:05

AW: File mit SHFileOperation in Papierkorb versch. geht nicht
 
Einmal da schauen http://www.jff2k.de/index-news.php?s...435473&ucat=3&

mkinzler 23. Okt 2015 20:09

AW: File mit SHFileOperation in Papierkorb versch. geht nicht
 
Da das Problem ja schon gelöst ist, mache ich hier mal besser dicht.

Daniel 23. Okt 2015 20:25

AW: File mit SHFileOperation in Papierkorb versch. geht nicht
 
Danke dafür.
Ich habe derweil den Avatar entfernt. Ein gekreuzigter Torso gehört hier einfach nicht her. Ganz einfach.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz