![]() |
Ini Section im Speicher umbenennen
Gibt es die Möglichkeit die Section einer Inidatei direkt im Arbeitsspeicher umzubenennen ohne die Datei vorher zu laden und erneut zu speichern?
DIesen Code hier habe ich in meine eigene Ini-Klasse eingebaut. Aber ich würde die Section gerne im Speicher umbenennen und mir den Weg über die Festplatte ersparen. ![]() |
AW: Ini Section im Speicher umbenennen
Achtung: In dem Code aus der CodeLib fehlt der Ressourcenschutzblock try-finaly und die StringListe wird nicht wieder freigegeben ini.free!
|
AW: Ini Section im Speicher umbenennen
Verwendest du denn TMemIniFile? Das wurde ja in den letzten Delphiversionen massiv umgebaut (ist deutlich schneller usw.).
Das im verlinkten Beitrag genannte TIniFile basiert auf ur-ur-uralten API-Funktionen aus Zeiten von Windows 3.x, das sollte man nicht mehr verwenden... ![]() Zitat:
Zitat:
|
AW: Ini Section im Speicher umbenennen
Ich benutze TMemIniFile in einer eigenen, abgeleiteten Klasse die ich mit weiteren für mich nutzbare Funktionen erweitert habe.
Zitat:
Delphi-Quellcode:
Ini := TMemIniFile.Create('daten.ini');
try // Section hier umbenennen möglich? Ini.RenameSection('alt', 'neu'); ? finally Ini.Free; end; |
AW: Ini Section im Speicher umbenennen
Sektion aus Inidatei in eine Stringliste kopieren. Sektion in Inidatei löschen. Sektionsbezeichnung in der Stringliste umbenennen. Sektion in Inidatei zurück kopieren. Also so irgendwie oder ähnlich.
|
AW: Ini Section im Speicher umbenennen
Mit
Delphi-Quellcode:
kommst du an den Inhalt als
TMemIniFile.GetStrings
Delphi-Quellcode:
und mit
TStrings
Delphi-Quellcode:
kannst du ihn wieder schreiben. Der verlinkte Code könnte also folgendermaßen angepasst werden:
TMemIniFile.SetStrings
Delphi-Quellcode:
Alternativ auch als
function RenameSection(MemIniFile: TMemIniFile; const OldSection, NewSection: String): boolean;
var lst: TStringList; ind: Integer; begin result := false; lst := TStringList.Create; try MemIniFile.GetStrings(lst); if lst.Count = 0 then Exit; if lst.indexOf('['+NewSection+']') >= 0 then Exit; ind := lst.IndexOf('['+OldSection+']'); if ind < 0 then Exit; lst.Strings[ind] := '['+NewSection+']'; MemIniFile.SetStrings(lst); result := true; finally lst.Free; end; end;
Delphi-Quellcode:
mit ein paar kleinen Verbesserungen:
class helper
Delphi-Quellcode:
type
TMemIniFileHelper = class helper for TMemIniFile public function RenameSection(const OldSection, NewSection: String): boolean; end; function TMemIniFileHelper.RenameSection(const OldSection, NewSection: String): boolean; var lst: TStringList; begin result := false; if SectionExists(NewSection) then Exit; if not SectionExists(OldSection) then Exit; lst := TStringList.Create; try GetStrings(lst); lst[lst.IndexOf('['+OldSection+']')] := '['+NewSection+']'; SetStrings(lst); result := true; finally lst.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 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