AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Ini Section im Speicher umbenennen

Ein Thema von DieDolly · begonnen am 15. Feb 2020 · letzter Beitrag vom 15. Feb 2020
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

Ini Section im Speicher umbenennen

  Alt 15. Feb 2020, 21:44
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.

https://www.delphipraxis.net/17752-d...mbenennen.html
  Mit Zitat antworten Zitat
Alt 15. Feb 2020, 22:01     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Ini Section im Speicher umbenennen

  Alt 15. Feb 2020, 22:04
Achtung: In dem Code aus der CodeLib fehlt der Ressourcenschutzblock try-finaly und die StringListe wird nicht wieder freigegeben ini.free!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Ini Section im Speicher umbenennen

  Alt 15. Feb 2020, 22:06
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...
https://docs.microsoft.com/en-us/win...eprofilestring
Zitat:
This function is provided only for compatibility with 16-bit Windows-based applications. Applications should store initialization information in the registry.
Wie du das mit
Zitat:
ohne die Datei vorher zu laden und erneut zu speichern
meinst, ist mir aber auch nicht klar. Woher sollen die Daten denn kommen, wenn die Datei nicht geladen wird? Speichern ist mit TMemIniFile nicht nötig, wenn die Daten nicht auf der Festplatte landen sollen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#4

AW: Ini Section im Speicher umbenennen

  Alt 15. Feb 2020, 22:13
Ich benutze TMemIniFile in einer eigenen, abgeleiteten Klasse die ich mit weiteren für mich nutzbare Funktionen erweitert habe.
Zitat:
Woher sollen die Daten denn kommen, wenn die Datei nicht geladen wird?
Die Daten sind in dem Fall schon geladen.

Delphi-Quellcode:
 Ini := TMemIniFile.Create('daten.ini');
 try
  // Section hier umbenennen möglich? Ini.RenameSection('alt', 'neu'); ?
 finally
  Ini.Free;
 end;

Geändert von DieDolly (15. Feb 2020 um 22:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Ini Section im Speicher umbenennen

  Alt 15. Feb 2020, 23:01
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.990 Beiträge
 
Delphi 12 Athens
 
#6

AW: Ini Section im Speicher umbenennen

  Alt 15. Feb 2020, 23:55
Mit TMemIniFile.GetStrings kommst du an den Inhalt als TStrings und mit TMemIniFile.SetStrings kannst du ihn wieder schreiben. Der verlinkte Code könnte also folgendermaßen angepasst werden:
Delphi-Quellcode:
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;
Alternativ auch als class helper mit ein paar kleinen Verbesserungen:
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz