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