Entwickler-Ecke

Windows API - Löschen in Papierkorb funzt nicht...


FriFra - Di 15.04.03 11:05
Titel: Löschen in Papierkorb funzt nicht...
Die folgende Funktion löscht zwar die Dateien, allerdings ist der Papierkorb danach leer!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function DeleteFileWithUndo(FileName: string): Boolean;
var
  f: TSHFileOpStruct;
begin
  FillChar(f, SizeOf(f), 0);
  with f do
  begin
    wFunc := FO_DELETE;
    pFrom := PChar(FileName);
    fFlags := FOF_ALLOWUNDO + FOF_NOCONFIRMATION + FOF_SILENT;
  end;
  Result := ShFileOperation(f) = 0;
end;


Delete - Di 15.04.03 11:26

Wahrscheinlich werde ich mir für diesen Kommentar hinterher einige harsche Kritik anhören dürfen, aber -

Dein Papierkorb (bzw. der, auf dessen Rechner dein Programm läuft) ist auch so eingestellt, dass Dateien wiederhergestellt werden können?


FriFra - Di 15.04.03 11:45

MathiasSimmack hat folgendes geschrieben:
Wahrscheinlich werde ich mir für diesen Kommentar hinterher einige harsche Kritik anhören dürfen


:oops: Nein, mirst Du nicht...


:roll: Ich weiss zwar nicht warum diese Option aktiviert war, aber es war tatsächlich so... ich hatte mich schon einmal vor ein paar Wochen geärgert, dass eine Datei nichtmehr auffindbar war, :x obwohl ich mir sicher war, den Papierkorb nicht geleert zu haben...


Delete - Di 15.04.03 13:27

Nebenbei gesagt: Die o.g. Funktion "DeleteFileWithUndo" hat Probleme mit Dateinamen, in denen ein Leerzeichen vorkommt. Doppelte Anführungszeichen (Gänsefüßchen) helfen da nicht. - Zumindest trat dieses Problem (Dateisystemfehler) bei mir mit Delphi 5 Pro auf.


FriFra - Di 15.04.03 13:36

Ich habe Delphi7 pro und da funktioniert es :D


Delete - Di 15.04.03 14:29

Ich wollte darauf hinaus, dass -laut Microsofts PSDK- der komplette Name mit zwei Null-Zeichen abgeschlossen werden muss. Es ist daher ausreichend, die folgende Zeile in der Funktion wie folgt zu ändern

Quelltext
1:
 pFrom := PChar(FileName + #0);                    

(oder auch #0#0). Dann geht´s auch hier. :)