Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   FreePascal Lazarus Movefile Umlaute (https://www.delphipraxis.net/201743-lazarus-movefile-umlaute.html)

Moombas 22. Aug 2019 11:23

Lazarus Movefile Umlaute
 
Moin,

da ihr sagtet das ich hier auch weiter fragen kann, mal etwas was ihr evtl. kennt oder wisst wie ich es umgehen kann:

Ich möchte eine Datei verschieben mittels movefile(); Dies hat in Delphi auch anstandslos funktioniert.
In Lazarus stören ihn jedoch Umlaute im Dateinamen. Kann man das irgendwie umschiffen oder durch eine Einstellung hin bekommen?
Hat da schon jemand Erfahrung?

mjustin 22. Aug 2019 11:26

AW: Lazarus Movefile Umlaute
 
Lazarus enthält eine Unit, LazUTF8, mit der ich besseren Unicode Support erhielt als ohne (im Daraja Framework).
Vielleicht hilft es auch in diesem Fall. Die Unit muss einfach nur z.B. im Projektsource in den uses hinzugefügt werden.
Lazarus schlägt daraufhin ein Package vor das noch hinzugefügt werden muss.

(iir Projekt => Projektinspektor => Hinzufügen => Neue Abhängigkeit => LazUtils auswählen => Ok)

Moombas 22. Aug 2019 11:33

AW: Lazarus Movefile Umlaute
 
Danke für die fixe Antwort, das Ergebnis bleibt leider unverändert. Wobei er mir auch kein Package vorgeschlagen hat.

HolgerX 22. Aug 2019 11:48

AW: Lazarus Movefile Umlaute
 
Hmm..

War da nicht was, das Lazarus intern UTF8 bei strings verwendet?
Und darin sind die Umlaute UTF8 kodiert...

Die Windows-Api movefile erwartet als MoveFileA einen AnsiString und als MoveFileW einen WideString.
Ich weiß nicht ob Lazarus automatisch aus dem UTF8 String einen ANSI macht..

Ansonsten MoveFileW mit explizierter Konvertierung der Strings nach WideString arbeiten, dann sollte es auf jeden Fall mit den Umlauten passen.

Hier mal die Konvertierung:
https://wiki.freepascal.org/Widestring/de

mjustin 22. Aug 2019 11:58

AW: Lazarus Movefile Umlaute
 
Zitat:

Zitat von Moombas (Beitrag 1442585)
Danke für die fixe Antwort, das Ergebnis bleibt leider unverändert. Wobei er mir auch kein Package vorgeschlagen hat.

Sorry, nicht Package sondern Abhängigkeit (LazUtils). Bei Lazarus 2 erscheint der Hinweis. Ist es eine aktuelle Version mit FPC 3.0.4?

Moombas 22. Aug 2019 12:07

AW: Lazarus Movefile Umlaute
 
@HolgerX:
Delphi-Quellcode:
procedure ArchiveClick(Sender: TObject);
var
  i   : integer;
  Path : String;
begin
  Path := 'xxx';
  for i := 0 to CSVList.Count - 1 do
  begin
    if fileexists(Path + CSVList.Items.Strings[i]) then
    begin
      movefile(PChar(Path + CSVList.Items.Strings[i]), PChar(Path + 'Archiv\' + CSVList.Items.Strings[i])); //akzeptiert keine Umlaute
    end;
    if fileexists(Path + 'DB\' + CSVList.Items.Strings[i] + '.db') then
    begin
      //MySQL;
      movefile(PChar(Path + 'DB\' + CSVList.Items.Strings[i] + '.db'), PChar(Path + 'DB\Archiv\' + CSVList.Items.Strings[i] + '.db')); //akzeptiert keine Umlaute
      movefileW(PWideChar(Path + 'DB\' + CSVList.Items.Strings[i] + '.db'), PWideChar(Path + 'DB\Archiv\' + CSVList.Items.Strings[i] + '.db')); //akzeptiert keine Umlaute  
    end;
  end;
  ListFiles(CSVList, Path);
end;
@mjustin: Japp, aber LazUtils ist bereits vorhanden im Projektinspector

HolgerX 22. Aug 2019 12:19

AW: Lazarus Movefile Umlaute
 
Hmm..

https://wiki.freepascal.org/Character_and_string_types

Wenn ich dass richtig verstanden habe:
Ab FPC 2.7.1 enthält ein 'string' unter Freepascal/Lazarus einen UTF8 kodierten String KEIN ANSI oder WideString...

Somit müsste dieser zunächst nach ANSI-/WideString konvertiert werden!!
In deinem Source wird immer mit den Freepascal 'String' gearbeitet..

Schau mal hier im Abschnitt 'Der Umgang mit Verzeichnis- und Dateinamen'

https://wiki.freepascal.org/LCL_Unicode_Support/de

Dort wird die Unit 'FileUtil' empfohlen für die automatische Konvertierung nach ANSI/WideString...

(Bin übrigens kein Lazarus progger.. Alles nur (in Sekunden) per Google gefunden)

Moombas 22. Aug 2019 13:36

AW: Lazarus Movefile Umlaute
 
FileUtil hat schon mal nicht geholfen (zumindest findet er die Angesprochenen Funktionen wie UTF8ToSys dann dennoch nicht)

p80286 22. Aug 2019 21:32

AW: Lazarus Movefile Umlaute
 
Vielleicht findest Du hier etwas erhellendes

Das
Delphi-Quellcode:
  movefile(PChar(Path + 'DB\' + CSVList.Items.Strings[i] + '.db'), PChar(Path + 'DB\Archiv\' + CSVList.Items.Strings[i] + '.db'));
kann nicht funktionieren, da Du dann UTF-8 übergibst. das kann Windows nicht.

Gruß
K-H

Moombas 23. Aug 2019 07:00

AW: Lazarus Movefile Umlaute
 
@p80286:

1. In Delphi hat das einwandfrei funktioniert
2. In Lazarus funktioniert es, so lange ich keine Umlaute im Pfad/Dateinamen habe.

Den Link werde ich mir jedoch mal anschauen.

Bei Lazarus wurde mir nun folgende funktionierende Lösung gezeigt:

Zitat:

Solution: use movefilew and a wrapper procedure:

Delphi-Quellcode:
procedure mymovefile(src,target:unicodestring);
begin
 movefilew (pwidechar(src),pwidechar(dest),.... other params);
end;

Es scheint also eine Kombination aus mehreren getesteten Sachen zu sein XD Ich habe natürlich immer getrennt von einander getestet. -.-


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:51 Uhr.
Seite 1 von 2  1 2      

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