AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Korrekturvorschlag: DoFileWork()

Ein Thema von blackdrake · begonnen am 25. Apr 2009 · letzter Beitrag vom 26. Apr 2009
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15 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