Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TiniFile.ReadString Fehler, wenn ... (https://www.delphipraxis.net/216355-tinifile-readstring-fehler-wenn.html)

t2000 16. Dez 2024 09:04

Delphi-Version: 12 Athens

TiniFile.ReadString Fehler, wenn ...
 
Hi Leute,

Haben INI-Dateien gewisse Voraussetzungen?

Meine ini-Datei:
Code:
Zeile 1:[base]
Zeile 2:MeinName=MeinWert
Zeile 3:
usw.
Delphi-Quellcode:
  LiniFile := TIniFile.Create( Pfad + 'Datei.ini'); // Pfad/Dateiname ist alles richtig
  LMeinWert := LiniFile.ReadString( 'base', 'MeinName', '');
Anschließend ist LMeinWert = '' also leer

Wenn ich aber die ini-Datei wie folgt ändere:
Code:
Zeile 1:; dummy
Zeile 2:
Zeile 3:[base]
Zeile 4:MeinName=MeinWert
Zeile 5:
usw.
und dann die Abfrage mache, ist alles so wie es sein soll.

Gibt es hier einen Bug?
Kann das jemand nachvollziehen?

VG
Thomas

DeddyH 16. Dez 2024 09:09

AW: TiniFile.ReadString Fehler, wenn ...
 
Kann ich hier nicht nachvollziehen. Meine Ini:
Code:
[base]
MeinName=MeinWert
Der Auslese-Code dazu:
Delphi-Quellcode:
var
  lIni: TIniFile;
begin
  lIni := TIniFile.Create('E:\Test.ini');
  try
    var s := lIni.readString('base', 'MeinName', '');
    ShowMessage(s);
  finally
    lIni.Free;
  end;
Es wird erwartungsgemäß "MeinWert" ausgegeben.

Olli73 16. Dez 2024 09:10

AW: TiniFile.ReadString Fehler, wenn ...
 
Haben die beiden Dateien das gleiche Encoding, ggf. mit BOM? Oder sonst irgendwie komische Zeichen in der Datei, die nicht geht?

Ansonsten solltest du besser TMemIniFile verwenden, das andere ist veraltet.

himitsu 16. Dez 2024 09:13

AW: TiniFile.ReadString Fehler, wenn ...
 
joooo, an BOM dachte ich auch.

UTF-8?


Die INI-WinAPI kann offiziell ausschließlich ANSI und Unicode (UCS2 UTF-16).

Versuch es mal mit TMemIniFile ... das nutzt intern TStringList, welche mit Anderem klarkommen sollte.


Vor der [ dürfen ja nur Leerzeichen und Tabs stehen (oder vielleicht einfach kleiner-gleich Leerzeichen), aber dann wären im ANSI (da es nicht als UTF-16 erkannt wird) andere "Zeichen" davor.

t2000 16. Dez 2024 09:55

AW: TiniFile.ReadString Fehler, wenn ...
 
Jupp, das war's. Die Datei hatte ich im Notepad++ geschrieben und sie war UTF8-BOM

ini-Dateien nehme ich eigentlich gar nicht mehr, aber die Info zu welcher DB ich gerne möchte, muss ja irgendwo eingetragen werden. Und da ist ini praktisch, weil auch auf Linux möglich. (klar, nicht mir TIniFile)

jaenicke 16. Dez 2024 10:28

AW: TiniFile.ReadString Fehler, wenn ...
 
Zitat:

Zitat von t2000 (Beitrag 1544279)
ini-Dateien nehme ich eigentlich gar nicht mehr, aber die Info zu welcher DB ich gerne möchte, muss ja irgendwo eingetragen werden. Und da ist ini praktisch, weil auch auf Linux möglich. (klar, nicht mir TIniFile)

Doch, unter anderen Systemen wird die Klasse auf TMemIniFile umgeleitet. Da TIniFile unter Windows aber auf seit über 30 Jahren (!) abgekündigten Funktionen (die für Windows bis 3.x waren) basiert, sollte man es eh nicht mehr verwenden und direkt TMemIniFile nehmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz