Dateizugriff mit UTF8

Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Dateizugriff mit UTF8

Beitrag von Scotty »

Wenn der Programmname oder das dahin verweisende Verzeichnisse potentiell Sonderzeichen enthält, sollten eigentlich die UTF8-Versionen der Dateizugriffsbefehle helfen. Ich bekomme aber bei "projöct1" statt "project1" mit dem folgenden Code das Verzeichnis "projöct1" angelegt. Im Debugger wird mir der String in SysToUTF8 auch mit 4 Byte Kodierung angezeigt (...\Lokale Einstellungen\Anwendungsdaten\proj'#195#131#194#182'ct1\'). Mache ich was falsch?

Code: Alles auswählen

function TForm1.ConfigPath: string;
begin
  if not FileExistsUTF8(ChangeFileExt(Application.ExeName,'.ini')) then
  begin
    if not DirectoryExistsUTF8(GetAppConfigDirUTF8(false)) then
      ForceDirectoriesUTF8(GetAppConfigDirUTF8(false));
    Result:=GetAppConfigDirUTF8(false);
  end else
    Result:=ExtractFilePath(Application.ExeName);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  aFileName:string;
begin
  aFileName:=ChangeFileExt(ExtractFileName(Application.ExeName),'.ini');
  with TIniFile.Create(UTF8ToSys(ConfigPath+aFileName)) do
  try
    WriteInteger('Header','Version',1);
  finally
    Free;
  end;
end;
Lazarus 1.1 r39300 FPC 2.6.0 i386-win32-win32/win64

-MObjFPC -Scghi -O1 -g -gl -WG -vewnhi -Filib\i386-win32 -FuC:\Lazarus\lcl\units\i386-win32\win32 -FuC:\Lazarus\lcl\units\i386-win32 -FuC:\Lazarus\components\lazutils\lib\i386-win32 -FuC:\Lazarus\packager\units\i386-win32 -Fu. -FUlib\i386-win32\ -l -dLCL -dLCLwin32

Benutzeravatar
theo
Beiträge: 10921
Registriert: Mo 11. Sep 2006, 19:01

Re: Dateizugriff mit UTF8

Beitrag von theo »

Geh das doch mal Schritt für Schritt durch.

Ein Teil des Codes ist überflüssig.
GetAppConfigDirUTF8 nimmt den boolean Parameter Create. Damit wird das Verzeichnis erstellt.
ForceDirectoriesUTF8 etc. kannst du dir sparen.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Dateizugriff mit UTF8

Beitrag von Scotty »

theo hat geschrieben:Geh das doch mal Schritt für Schritt durch.
function SysToUTF8(const s: string): string; (aufgerufen von GetAppConfigDirUTF8)

s=...Lokale Einstellungen\Anwendungsdaten\proj'#195#182'ct1\'
Result= ... Einstellungen\Anwendungsdaten\proj'#195#131#194#182'ct1\'

Muss eine Regression sein: früher hat meine Funktion auch unter XP funktioniert. Wobei GetAppConfigDirUTF8(false, true) noch übersichtlicher ist :mrgreen:

Antworten