LoadFromFile Fehler bei Sonderzeichen in Dateiname

Rund um die LCL und andere Komponenten
Antworten
biky
Beiträge: 3
Registriert: Do 3. Sep 2009, 21:08
OS, Lazarus, FPC: Windows XP (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit
Wohnort: Schweiz

LoadFromFile Fehler bei Sonderzeichen in Dateiname

Beitrag von biky »

Ich versuche ein mit TOpenDialog erhaltenen Filename mittels LoadFromFile zu öffnen. Das hat bisher mit lazarus 0.9.24 wunderbar geklappt, doch nachdem ich heute auf die aktuelle Version 0.9.26.2 Beta umgestiegen bin erhalte ich die Fehlermeldung 'Unable to open file "G:\André_history.hst"' wenn im Dateiname ein Sonderzeichen ist. Dateien ohne Sonderzeichen im Filename können problemlos geöffnet werden. Ich arbeite mit Windows XP. Was muss ich ändern, damit ich wieder alle Windowskonformen Dateinamen einlesen kann?

Code: Alles auswählen

procedure TMainForm.InpFOpenExec(Sender: TObject);
 
begin
  If InpFDlg.Execute then
    If InpFDlg.Files.Count > 1 then
    begin
      MessageDlg('you can''t select multiple files!', mtError, [mbOk],1);
    end
    else
    begin
      InputFile.Text:=InpFDlg.FileName;
    end;
end;
 
procedure TMainForm.InputFileChange(Sender: TObject);
var
  i, nr: integer;
  str2add: widestring;
begin
  TrackList.Items.Clear; TrkName.Text:=' '; Nrofpoints.Text:=' ';
  InF:=tstringlist.create;
  if CompareStr(InputFile.Text, '')<>0 then
  begin
    InF.LoadFromFile(InputFile.Text); //-----------diese Zeile verursacht den Fehler
    if CompareStr(ExtractFileExt(Inputfile.Text), '.xml')=0 then
      begin
        InFTyp.ItemIndex:=0;
Nach erfolgloser, ausgiebiger Suche hier im Forum hoffe ich, dass mir einfach geholfen werden kann;-). Vielen Dank

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

Re: LoadFromFile Fehler bei Sonderzeichen in Dateiname

Beitrag von theo »

InF.LoadFromFile(UTF8toSys(InputFile.Text))

Lazarus benutzt jetzt UTF-8. Dein str2add: widestring; ist wahrsch. auch problematisch.

biky
Beiträge: 3
Registriert: Do 3. Sep 2009, 21:08
OS, Lazarus, FPC: Windows XP (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit
Wohnort: Schweiz

Re: LoadFromFile Fehler bei Sonderzeichen in Dateiname

Beitrag von biky »

theo hat geschrieben:InF.LoadFromFile(UTF8toSys(InputFile.Text))
DANKE, das wars (dabei habe ich bereits vor meinem Posting über eine Stunde mit UTF8toAnsi, AnsiToUTF8 und ganz bestimmt auch sysToUTF8 versucht das Problem zu lösen. Dabei muss ich wohl UTF8toSys ausgelassen haben :evil: )
Lazarus benutzt jetzt UTF-8. Dein str2add: widestring; ist wahrsch. auch problematisch.
Ich glaube str2add: widestring scheint noch problemlos zu funktionieren. Zumindest als ich die Datei in ohne Sonderzeichen umbenannt habe, bekam ich keine Fehlermeldung und es schien zu funktionieren. Kann das aber erst heute Abend ausgiebig testen.

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

Re: LoadFromFile Fehler bei Sonderzeichen in Dateiname

Beitrag von theo »

UTF8toSys macht auf Windows eigentlich das Gleiche wie UTF8toAnsi, der Unterschied ist, dass es auf Linux (UTF-8) keine Umwandlung macht, weil es dort nicht notwendig ist. Mit UTF8toSys läuft dein Code also auch auf Linux und Mac.

Kann schon sein, dass dein WideString keine Probleme macht, aber er hat eigentlich in Lazarus erstmal nichts zu suchen.
Es gibt nat. trotzdem Gründe warum man ihn einsetzen kann. Um zu beurteilen ob er gerechtfertigt ist müsste man aber deinen Code sehen.

biky
Beiträge: 3
Registriert: Do 3. Sep 2009, 21:08
OS, Lazarus, FPC: Windows XP (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit
Wohnort: Schweiz

Re: LoadFromFile Fehler bei Sonderzeichen in Dateiname

Beitrag von biky »

Betreffend widestring bin ich immer gerne bereit dazuzulernen und lade die gesamte Codedatei hoch. Die procedure TMainForm.InputFileChange beginnt in Zeile 262 und die widestring-variable str2add wird in Zeilen 329 - 331 verwendet. Ich denke es war zum Zeitpunkt als ich diese Codezeilen schrieb notwendig widestring zu verwenden oder ich habe diese Codezeilen unverändert aus anderen Beispielen kopiert.
Dateianhänge
frmmain.pas
(30.72 KiB) 41-mal heruntergeladen

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

Re: LoadFromFile Fehler bei Sonderzeichen in Dateiname

Beitrag von theo »

Die Funktion ExtractDelimited in strutils gibt keinen WideString zurück.
Warum hier ein WideString ins Spiel kommt kann ich also nicht nachvollziehen:

Code: Alles auswählen

str2add:=ExtractDelimited(2, InF[i+1], ['<']);
str2add:=ExtractDelimited(2, str2add, ['>'])+' @ Line #'+InttoStr(i+1);
TrackList.Items.Add(str2add);
Das kann unter Windows ohne merkliche Auswirkungen bleiben (ausser Geschwindigkeit und Speicherbedarf) aber unter UTF-8 Systemen (Linux) kann das für Umlaute etc. Fehlerhaft werden.

Antworten