![]() |
Was passiert mit der INI-File beim beschreiben ?
Hi Leutz,
was mich interessieren würde ist, wenn ich einige Daten in die Ini schreibe wird die Komplette Datei beschrieben so das die alten Einträge gelöscht sind ? Oder werden nur die beschriebene Werten neu angelegt ? Mir fiel es nur auf, weil ich in einer IniFile z.B. folgendes stehen habe
Code:
Nehmen wir an, das ich im Programm jetzt Data2 gelöscht habe. Wegen den Anzahl=1 wird er dann nur einmal den Wert einlesen daher fiel es mir nicht sofort auf. Aber er lässt trotzdem Data2 drin stehen. Weil ich davon ausging das es komplett überschrieben wird.
[Data]
Anzahl=2 [Data1] Titel=Irgendwas [Data2] Titel=Nochirgendwas Danke schon mal für euer Erklärung und eventuell falls es so ist wie ich es vermute wie ich es lösen könnte ? Oder wäre die einzigste Möglichkeit vor dem speichern die Datei zu löschen ? |
Re: Was passiert mit der INI-File beim beschreiben ?
Nein, ältere Daten werden ich gelöscht
|
Re: Was passiert mit der INI-File beim beschreiben ?
Zitat:
|
Re: Was passiert mit der INI-File beim beschreiben ?
Ich weiß es zwar nicht genau, gehe aber zu 98 % von folgendem aus : da es sich um Textdateien handelt werden diese wohl nur sequentiell gelesen/geschrieben werden können. Ich bearbeite meine Source-Codes z.B. folgendermaßen (hauptsächlich wegen $DEFINE) :
1. Datei kopieren. 2. zeilenweise aus Kopie lesen, ändern und in neue Datei schreiben. falls fehlerfrei : 4. Original mit geänderter Datei überschreiben 5. Kopie löschen Glaube kaum, daß Mickysoft es anders macht. 8) |
Re: Was passiert mit der INI-File beim beschreiben ?
Also es ist so, dass alte Einträge in einer Ini nicht gelöscht werden. Nur wenn man einen Wert ändert, dann werden alte Werte überschrieben. Oder es werden halt neue Werte hinzugefügt, wenn der Wert noch nicht existiert.
Wenn man alle alten Daten löschen will, ist wohl die "Radikalmethode" am angebrachtesten: Datei löschen und dann mit den nötigen Werten neu schreiben. MfG Binärbaum |
Re: Was passiert mit der INI-File beim beschreiben ?
ich lese bei programmstart alles aus der ini aus und beim beeenden wird die Ini-Datei gelöscht und komplette neu geschrieben.
|
Re: Was passiert mit der INI-File beim beschreiben ?
Es sieht so aus, daß weder was gelöscht wird usw. Das wird aber sehr wohl alles gelöscht und eben umkopiert. Rest : siehe vorheriger Beitrag. Man vergleiche mal eine .PAS die man geändert hat, mit einer gleichnamigen .~PAS 8)
|
Re: Was passiert mit der INI-File beim beschreiben ?
Natürlich werden "alte Einträge" in Ini-Dateien gelöscht (was auch immer das bedeuten soll, ich vermute mal Einträge, die mit DeleteKey gelöscht wurden). Wäre ja auch schlimm wenn nicht.....
Die Section bleibt aber solange drin, bis auch sie mit EraseSection gelöscht wird. Der Sinn ist vermutlich der, daß beim Löschen des letzten Eintrags aus einer Section die dann leere Section an der Stelle bestehen bleiben soll. Ansonsten würde sie beim ersten Wieder-Anlegen eines Eintrags ganz unten angelegt, was vielleicht verwirrend sein könnte. Roderich |
Re: Was passiert mit der INI-File beim beschreiben ?
@Hansa:
eine Inidatei hat mit einer .pas-Datei aber nun wirklich gar nix zu tun..... :???: Roderich |
Re: Was passiert mit der INI-File beim beschreiben ?
Zitat:
|
Re: Was passiert mit der INI-File beim beschreiben ?
Zitat:
|
Re: Was passiert mit der INI-File beim beschreiben ?
@Hansa:
No :warn: Eine Inidatei ist nicht eine stinknormale Textdatei. Eine Inidatei ist nach einem festen Schema aufgebaut, und zwar in Sections (oder Gruppen) organisiert, deren Namen in eckigen Klammern eingefaßt sind. Innerhalb dieser Sections stehen Einträge im Format <Identifier> = <Value>. Der Zugriff erfolgt mit den Methoden von TIniFile, wobei Einträge nur mit Angabe des Sections-Namen manipuliert werden können. Z.B.
Delphi-Quellcode:
Inifile.WriteString(Section, Identifier, Value);
Die Datei-Extension ist allerdings wurscht, da stimm ich dir zu. Es hat sich aber .ini etabliert. Roderich |
Re: Was passiert mit der INI-File beim beschreiben ?
Zitat:
|
Re: Was passiert mit der INI-File beim beschreiben ?
Zitat:
Diese *.~Pas dateien sind einfach nur Backupfiles die von Delphi angelegt werden. |
Re: Was passiert mit der INI-File beim beschreiben ?
INI-Files werden nicht gelöscht und neu geschrieben. Wers nich glauben will, darfs gerne ausprobieren. Wenn man vorher 2 sections hatte, diese läd, und dann im Inifile mit writesection nur eine am ende wieder schreibt, is die 2te trotzdem noch drin. Deswegen das INI vor dem beschreiben mit DeleteFile() löschen.
|
Re: Was passiert mit der INI-File beim beschreiben ?
Danke Leute, nun habe ich Gewissheit weil es mich zunächst verwirrt hatte als ich es in ein Text Editor angeschaut habe. Also werde ich wohl die Ini löschen bevor ich es neu schreibe.
Oder wenn man auf der sichere Seite will das die Speicherfunktion unterbrochen wird sollte man doch lieber die Ini zunächst Temporär speichern, dieses dann die Ini überschreiben und dann die Temporäre Datei wieder löschen. Übrigens INI ist zwar anders eingeteilt mit Section u.s.w. aber so oder so sie ist trotzdem eine Text Datei. Man könnte auch eine BlaBla.XYZ als Ini File benutzen anstatt BlaBla.Ini . |
Re: Was passiert mit der INI-File beim beschreiben ?
also, um das ganze leidige Thema mal abzuschließen.....
Inidateien sind (natürlich) Textdateien, genau wie *.pas, *.c, *.bat, ... und 1000 andere -> sie sind also z.B. mit einem Texteditor lesbar. Sie sind aber nach ihrer Definition nicht "ganz normale" Textdateien, sondern in einem festen Format aufgebaut. Dieses Format sieht Gruppen (Sections) vor, innerhalb derer die Einträge (Identifier) stehen. Gruppen sind in eckigen Klammern [] eingefaßt. Einträge werden immer von einem "=" Zeichen gefolgt, nach dem der Wert (Value) steht. Beispiel: [System] GUI=1 Bootlogo=Splash.bmp [Printer] Default=HP Deskjet So, falls jetzt mit Inifile.WriteString('Printer', 'Default', 'Epson Stylus') der Default-Eintrag in der Printer-Gruppe geändert wird, bleibt NATÜRLICH auch die erste Gruppe "System" bestehen. Wär ja auch schlimm, wenn nicht. Wenn mit Inifile.DeleteKey('Printer', Default') der Default-Eintrag gelöscht wird, bleibt die Gruppe "Printer" trotzdem bestehen, nur eben leer (d.h. ohne Einträge). Eine Inidatei löschen zu müssen, bevor sie neu geschrieben wird, deutet zumindest mal auf ein "seltsames" Programmkonzept hin. Oder Inidateien werden dort nicht in ihrem eigentlichen Sinn verwendet. Die Delphi-Hilfe zu TIniFile erklärt das Konzept übrigens auch recht gut. Roderich |
Re: Was passiert mit der INI-File beim beschreiben ?
//EDIT: Dieses Posting hat sich mit dem von roderich zuvor überschnitten.
-------------------------------------------------------------------------- Oh man, ihr habt aber auch alles in den Thread reingeschmissen, was es zum Thema Datei gibt, wie? :shock: Zitat:
Wenn du eine Ini als das benutzt, wofür sie da ist, was gibt es dann für Probleme? Wenn du eine Ini bearbeiten wilst, dann tue das über TIniFile. Damit stehen dir genügend Methoden zur Verfügung, die Bestandteile einer Ini (Sektionen, Schlüssel und Werte) zu lesen, zu schreiben oder zu löschen. Diese Bestandteile einer Ini sind separat zu betrachten und zu bearbeiten. Dabei ist es völlig egal, in welchem Fileformat eine Ini auf die Platte geschrieben wird. Und ja, das Fileformat ist Textfile. Es ist ein Textfile mit vorgegebener inhaltlicher Struktur (Sektionen, Schlüssel, Werte). Eben der Struktur einer gemeinhin als Ini bezeichneten Datei. Wenn du die Sektion A bearbeitest, bleibt Sektion B natürlich unberührt. Das ist doch gerade der Witz an TIniFile, dass du die Bestandteile einer Ini separat bearbeiten kannst und nicht die ganze Datei lesen, bearbeiten und zurückschreiben musst. Änderungen (schreiben, löschen) sind bei NT (und in der Familie aufwärts) sofort in die Ini-Datei auf der Platte eingepflegt. Bei Windows95 (und spätere Verwandte) wird der Plattenzugriff möglicherweise noch gepuffert. Da kann man dann aber das Schreiben auf Platte mit TIniFile.UpdateFile erzwingen. |
Re: Was passiert mit der INI-File beim beschreiben ?
Damit keine Missverständnisse gibt.
Ich verwende die Ini Datei (eine einzige Datei) um die Einstellungen u.s.w. im Programm zu speichern. Klar die braucht man dann nicht zu löschen u.s.w. ABER ich verwende diese Datei auch um die Daten aus einer ListView zu speichern (darüber kann man streiten da andere Möglichkeiten gibt). Und gerade wenn ich die Daten speicehre wird es in Section Data1 Data2 u.s.w. erstellt. Sobald ich aber mal 100 Data gespeichert habe. Und irgendwann dann die 50 Datas lösche dann stehen die "alten" 50 Datas immer noch drin. Also wird die Datei nur unötig aufgebläht obwohl nicht mehr benötigt wird. Deswegen das löschen. |
Re: Was passiert mit der INI-File beim beschreiben ?
Zitat:
Zitat:
|
Re: Was passiert mit der INI-File beim beschreiben ?
@IngoD7:
Du hast es (auch) erfaßt :???: @Darty: du verwendest Inidateien in einem anderen Sinn, als sie eigentlich vorgesehen sind. Selbst das würde aber noch gehen, wenn du einfach die Daten in einer einzigen Gruppe speicherst (z.B. 1=Eintrag1, 2=Eintrag2 usw.). Dann kannst Du mit EraseSection die eine Gruppe löschen und dann nur mit den zu speichernden Daten füllen. Roderich |
Re: Was passiert mit der INI-File beim beschreiben ?
hmmm ...
Dann muss ich wohl noch ein wenig an der Code basteln. In Moment schreibe ich mithilfe einer Schleife die Daten rein. Und der Wert Count von der Listview wird mitgespeichert so das ich auch wieder mit einer Schleife auslesen kann. Da man ja den Wert nicht im Vorraus weisst. Also muss ich den alten Count Wert und den neuen Wert wissen, damit ich die restlichen alten die nicht mehr benötigt werden seperat lösche. Auch eine gute Idee. Bei mir sieht die Section mit den Daten von Listview so ungefähr aus
Delphi-Quellcode:
sind bei mir aber noch mehrere Keys drin, sollte ja nur ein Beispiel sein damit man es sich vorstellen kann das mit einer einzige Section löschen nicht getan ist.
[Data1]
Titel=BlaBla Kategorie=glucl gluck [Data2] Titel=sdfsdf Kategorie=sdfsdf ... ... |
Re: Was passiert mit der INI-File beim beschreiben ?
lösch die alten Gruppen doch einfach
Delphi-Quellcode:
for i := NewCount+1 to OldCount do
IniFile.EraseSection('Data' + IntToStr(i)); |
Re: Was passiert mit der INI-File beim beschreiben ?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz