Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

Korrekturvorschlag: DoFileWork()

  Alt 25. Apr 2009, 01:04
Hallo.

Ich habe eigentlich keinen neuen Artikel, dafür wollte ich einen alten Artikel verbessern bzw. kommentieren (was ja so ohne weiteres nicht möglich ist). Ich hatte den Autor sakura im Oktober 2008 deswegen angefragt, doch die Nachricht ist bis zum heutigen Tage ungeöffnet, trotz Nutzeraktivität...

Folgende Funktion führt eine Operation bei einer Datei durch:

http://www.delphipraxis.net/internal...?p=68850#68850

Mir ist aufgefallen, dass PAnsiChar, AnsiString sowie SHFileOperationA() verwendet wurde. Für was? Ich erachte es für besser, wenn direkt die Delphi-Standardtypen PChar, String und der Alias SHFileOperation() verwendet werden. Dann ist die Anwendung auch direkt Unicode-Fähig, wenn auf D2009 umgestiegen wird.

Das wäre also mein Korrekturvorschlag:

Delphi-Quellcode:
// [url]http://www.delphipraxis.net/post68850.html[/url]
// Unicode-Compatible for future Delphi versions [blackdrake]
function DoFileWork(aOperation: FILEOP_FLAGS; aFrom, aTo: String;
    Flags: FILEOP_FLAGS): Integer;
var
  FromPath, ToPath: String;
  SHFileOpStruct: TSHFileOpStruct;
begin
  FromPath := aFrom + #0#0; // ToDo? Ist #0#0 im Falle von WideStrings dann #0#0#0#0?
  ToPath := aTo + #0#0;
  with SHFileOpStruct do
  begin
    Wnd := 0;
    wFunc := aOperation;
    pFrom := PChar(FromPath);
    if ToPath <> 'then
    begin
      pTo := PChar(ToPath)
    end
    else
    begin
      pTo := nil;
    end;
    fFlags := Flags;
  end;
  Result := SHFileOperation(SHFileOpStruct);
end;
Meinen Korrekturvorschlag muss ich leider noch mit einer Frage verbinden, die auch oben einkommentiert ist. Muss das terminierende #0#0 (wieso 2 Mal bei AnsiStrings?) beim Wandel zu WideStrings in #0#0#0#0 gewandelt werden? Wenn ja, dann sollte hier noch eine Bedingung eingeführt werden, die unterscheidet zwischen String==AnsiString (D2007) und String==WideString (D2009+).

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat