Autor Téma: Delphi 10.4.2 a IniFiles  (Přečteno 306 krát)

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 183
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Delphi 10.4.2 a IniFiles
« kdy: 13-05-2021, 09:41:03 »
Od Delphi 10.4 se začala jinak chovat práce s INI soubory.
Týká se to jak TIniFile, tak i TMemIniFile
Používal jsem to, že ReadSectionValues() vracelo obsah sekce bez ohledu na to, zda tam byla nebo nebyla rovnítka
Zjistil jsem, že už tomu tak není a pokud řádky nejsou ve správném formátování (variable=value), tak se nevrátí nic, protože INI při načtení ty řádky ignoruje.
Vím, že jsem INI zneužíval na něco, na co nebyly dělány, ale je informace pro ostatní

Nehledě na to, že EraseSection padá u větších INI souborů v 10.4.2 na výjimky.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2869
  • Karma: 106
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 10.4.2 a IniFiles
« Odpověď #1 kdy: 13-05-2021, 09:54:13 »
Zajimave, mezi 10.4.2 a 10.3.3 je jedina zmena v inifiles podpora ReadInt64 a WriteInt64.
Zmeny ohledne section jsou v drivejsich verzi (konkretne 10.2 byl implementovan hashlist), vsechno je mozne, ale nenasel jsem jediny report ohledne EraseSection , coz bych za 2+ roky ocekaval.
Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3178
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Delphi 10.4.2 a IniFiles
« Odpověď #2 kdy: 13-05-2021, 09:57:47 »
Týká se to jak TIniFile, tak i TMemIniFile
To je zajimave, protoze TIniFile byvalo jen zapouzdrenim volani Win API funkci Read/WritePrivateProfileString(), zatimco ten TMemIniFile byvala samostatne cela implementace.

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 183
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Delphi 10.4.2 a IniFiles
« Odpověď #3 kdy: 13-05-2021, 14:09:34 »
Zajimave, mezi 10.4.2 a 10.3.3 je jedina zmena v inifiles podpora ReadInt64 a WriteInt64.
Zmeny ohledne section jsou v drivejsich verzi (konkretne 10.2 byl implementovan hashlist), vsechno je mozne, ale nenasel jsem jediny report ohledne EraseSection , coz bych za 2+ roky ocekaval.

Je mozné, že to bylo změněno dřív, 10.3 jsem skoro přeskočil. Zaregistroval jsem to až teď.
Co se týká EraseSection(), stává se mi to u větších INI souborů (asi 40kB) a většího množství zápisu najednou, kdy třeba po uložení parametrů přepisuju skoro celý obsah INI souboru (několik sekcí) a chtěl jsem mít nějaké sekce slušně seřazené, takže jsem je při zápisu smáznul a zapisem vytvořil znovu.
TFastIniFile, který je koncipovaný podobně jako TMemIniFile má metodu ClearSection(), která jen vyprázdní sekci bez jejího rušení a zatím to vypadá že tohle problémy nedělá.

Spíš jsem to bral jen jako informaci pro ostatní, pokud by měli nápad ukládat do ini něco jiného než se čeká.

Offline PetrB0

  • Mladík
  • **
  • Příspěvků: 94
  • Karma: 1
    • Verze Delphi: Delphi XE2, Delphi 10.2 Tokyo, Delphi 10.41
Re:Delphi 10.4.2 a IniFiles
« Odpověď #4 kdy: 16-05-2021, 23:03:36 »
Ahoj,
já už jsem si toho všimnul dříve. Dělal jsem si ini file, kde jsem ručně dopisoval význam jednotlivých nastavení v podobě komentářů před řádky, kterých se to týkalo. A když jsem do toho souboru přes Delphi něco napsal, tak mi to ty komenty sežralo. Ale bral jsem to jako vlastnost Ini soborů, tak jsem to obešel.

Pb

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 183
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Delphi 10.4.2 a IniFiles
« Odpověď #5 kdy: 17-05-2021, 14:02:36 »
TFastIniFile zvládá i komentáře, u kazde polozky je informace, o co jde (komentář, section, value, whitespace, ...). Umí i komentáře na řádku.
Ale zjistil jsem, že TFastIniFile má problém i s ClearSection, která v sobě vovlá Erase section, jen pak přeskočí úplné zrušení sekce. Zrejme je tam něco zlobí a podle všeho to EMBD převzalo do TMemIniFile (nebo naopak). Chová se to úplně stejně, co se výjimky týká.