Entwickler-Ecke
Dateizugriff - ini.erasesection geht nicht
Spurius - Mi 16.07.03 21:27
Titel: ini.erasesection geht nicht
Hallo
ich will mit
Delphi-Quelltext
1:
| ini.erasesection(profil) |
eine ini-datei löschen, von der ich nicht weiss, ob sie existiert. wenn sie nicht existiert, bekomme ich eine fehlermeldung. :( ich habs auch schon mit try...except versucht, hab aber auch fehlermeldung bekommen. An was kann das liegen?
MfG
Spurius
Delete - Mi 16.07.03 21:35
Wie wäre es, wenn du vorher mit
FILEEXISTS prüfst, ob sie da ist? :roll:
Moderiert von
Tino: Such-Tags hinzugefügt.
Delete - Do 17.07.03 07:15
Das, @Luckie, und dann hätte ich zum Löschen der Datei auch nicht "ini.EraseSection" benutzt. Vielleicht wäre
DELETEFILE doch besser?
Moderiert von
Tino: Such-Tags hinzugefügt.
Spurius - Do 17.07.03 11:53
Hallo,
wie prüfe ich aber ob in c:/test.ini die section xy existiert?
mit
Delphi-Quelltext
1:
| fileexists('c:/test.ini/xy') |
gehts nicht! Wie dann?
MfG
Spurius
Delete - Do 17.07.03 12:05
Du bringst, so scheint´s, einiges durcheinander.
Du versuchst eine Datei mit einer INI-Funktion zu löschen, und du versuchst eine bestimmte INI-Sektion mit einer Dateifunktion zu finden. Hm, kann das was werden? Ich glaube nicht. Da ich deine Kenntnisse trotzdem nicht einschätzen mag, gebe ich dir nur den gut gemeinten Hinweis: Falls nötig, setze dich bitte erst mit den Grundlagen auseinander.
Einstweilen - SectionExists (s. Hilfe zu TIniFile).
Spurius - Do 17.07.03 13:16
Kann schin sein das ich einiges durcheinanderbringe :oops: , ich prog mit Delphi noch nicht so lange. hab grad in der delphi-hilfe geschaut, hat mich aber nicht weitergebracht.
also nochmal: ich will eine ini-datei mit einer ini-funktion löschen, und davor feststellen, ob die ini-datei überhaupt existiert, da sonst eine Fehlermeldung kommt. Weiß jemand wie ich das abfrage, ob die datei existiert?
MfG
Spurius
Tino - Do 17.07.03 13:31
Hallo!
| Spurius hat folgendes geschrieben: |
| ich will eine ini-datei mit einer ini-funktion löschen, |
Dann ließ dir bitte noch mal den Hilfetext von der Methode
EraseSection durch. Diese löscht nicht die Ini-Datei sondern, wie der Methodennamen es auch vermuten lässt, eine Sektion einer Ini-Datei.
Wie man eine Datei löscht und auch vorher prüft ob diese existiert haben Luckie und Mathias weiter oben geschrieben.
Gruß
Tino
Delete - Do 17.07.03 14:30
Titel: Re: ini.erasesection geht nicht
Ich denke, hier scheitert eine vernünftige Antwort bereits daran, dass Begriffe wie INI-
Datei und
Sektion durcheinander gebracht werden. Sinn ergibt das allererste Posting von Spurius eigentlich nur so:
| Spurius hat folgendes geschrieben: |
ich will mit
Delphi-Quelltext 1:
| ini.erasesection(profil) |
eine ini-Sektion löschen, von der ich nicht weiss, ob sie existiert. |
In dem Fall lautet also die Antwort: vorher mit
SektionExists prüfen:
Delphi-Quelltext
1: 2:
| if ini.SectionExists(profil) then ini.EraseSection(profil); |
Ansonsten - wenn du tatsächlich eine
Datei löschen willst, dann sieht das natürlich so aus:
Delphi-Quelltext
1: 2:
| if fileexists('c:\test.ini') then DeleteFile('c:\test.ini'); |
Nichts für ungut, Spurius. Ich habe auch mal am Anfang gestanden, aber du solltest dich bemühen, deine Frage
verständlich zu formulieren.
Grüße.
Spurius - Do 17.07.03 15:15
Hallo,
ich will ja nicht nerven, aber das problem ist ja, das sectionexists als unbekannter bezeichner benannt wird. sonst wär das ja kein problem, aber so kann ich die existenz einer ini-section nicht prüfen. :x
MfG
Spurius
Delete - Do 17.07.03 15:30
Komisch, kennt mein Delpühi (D6 personal) auch nicht.
@mathias: Kuck da doch noch mal bitte nach.
Tino - Do 17.07.03 15:40
| Luckie hat folgendes geschrieben: |
| Komisch, kennt mein Delpühi (D6 personal) auch nicht. |
Mein Delphi 5 kennt die Funktion:
| Delphi-Hilfe hat folgendes geschrieben: |
Die Methode gibt an, ob die INI-Datei einen Abschnitt enthält.
Delphi-Quelltext 1:
| function SectionExists (const Section: String): Boolean; |
Beschreibung
Mit SectionExists kann festgelegt werden, ob die in FileName angegebene INI-Datei einen Abschnitt enthält.
Der String Section bezeichnet den INI-Dateiabschnitt, dessen Vorhandensein von SectionExists festgestellt wird.
SectionExists gibt einen booleschen Wert zurück, der angibt, ob der fragliche Abschnitt enthalten ist. |
Gruß
Tino
Delete - Do 17.07.03 16:12
Ich glaube zwar irgendwie nicht, dass Borland diese Funktion ab D6 wieder entfernt hat (das S nicht vergessen bei
SectionExists?), aber selbst wenn: die Funktion basiert nur auf
ReadSection (nach Schnüffeln in der "IniFiles.pas" ermittelt). Jetzt sagt bitte nicht,
ReadSection ist auch nicht bekannt.
Für den Notfall hier die Adaption für eure komischen Delphi-Versionen :wink:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| uses IniFiles;
function SectionExists(const ini: TIniFile; const Section: string): boolean; var S : TStringList; begin S := TStringList.Create; try ini.ReadSection(Section, S); Result := S.Count > 0; finally S.Free; end; end; |
Man muss eben in diesem Fall nur die TIniFile-Variable mit angeben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| ini := TIniFile.Create('win.ini'); if(ini <> nil) then try if(SectionExists(ini,'windows')) then ShowMessage('yo'); finally ini.Free; end; |
Delete - Do 17.07.03 16:20
Siehe hier:
Oder habe ich an der falschen Stelle gesucht?
Delete - Do 17.07.03 16:29
SectionExists ist eine Methode von "TCustomIniFile", lässt sich aber dennoch mit "TIniFile" benutzen. Unter TCI müsstest du sie auch im Index finden.
Aber, wie gesagt!, ich erhalte keine Fehlermeldung, wenn ich
deklariere und o.g. Funktion aufrufe. Wie sagt man: Vererbung? :)
Delete - Do 17.07.03 16:39
Ok, dann habe ich an der falschen Stelle gekuckt. Und mit dem Erben bin ich noch nicht dran, das dauert noch etwas. Aber vielleicht werde ich auch eingefrohren und erbe dann meine eigenen Zinsen und dann kaufe ich die letzte Anchovi-Dose. :wink:
Delete - Do 17.07.03 18:36
off-topic:
Guck dir die Folge an, die heute (gleich) kommt. In der Halle der Imperatoren, steht auf dem Bild nach Fry "Fry's assassin", und danach "Fry's assassin's assassin". Laut DVD-Kommentar die beste Möglichkeit, in letzterem viermal das Wort "ass" unterzubringen, ohne das der Zensor meckert. :mrgreen:
Langsam wird´s wohl Zeit für einen FUTURAMA-OT-Teil?
Spurius - Do 17.07.03 19:15
Also ich hab das mit der 'adaption' probiert, bekomme aber trotzdem meldung(bei sectionexists), nichtdefinierter bezeichner. Mach ich da irgendwas falsch oder gehts mit delphi 3 prof. einfach nicht?
Ich brauch halt sowas wie sectionexists, weil das ganze in einem adressenmanager verwendet wird und ich so profile löschen will.
MfG
spurius
Delete - Do 17.07.03 21:14
Zeig doch mal den Code, den du inzwischen hast. Bitte vollständig, aber nur den INI-Teil posten, nicht die ganze Unit. :)
Spurius - Do 17.07.03 22:15
Hallo,
hier der code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm7.Button1Click(Sender: TObject); begin profil := edit1.text; ini := tinifile.create('c:/test'); if sectionexists(ini,profil) then try ini.erasesection(profil); except showmessage('Geht nicht!'); end; profil := ''; end; |
geht aber nicht, wegen sectionexists(undef. bezeichner)
MfG
Spurius
Brueggendiek - Do 17.07.03 23:51
Hallo Spurius!
Es wäre sicherlich einen Versuch wert, zu schreiben:
Delphi-Quelltext
1:
| if ini.sectionexists(profil) then |
Gruß
Dietmar Brüggendiek
Delete - Fr 18.07.03 08:24
Er schrieb aber weiter oben, dass diese Methode bei ihm unbekannt ist, Dietmar. Nur aus dem Grund hat er es mit "meiner" Adaption versucht (die im übrigen auf Borlands Funktion aus der IniFiles-Unit basiert).
@Spurius: Ich kann natürlich daneben liegen, aber probier mal:
Delphi-Quelltext
1:
| ini := tinifile.create('c:\test.ini'); |
denn auch wenn die Datei im Explorer ohne Endung angezeigt wird, hat sie
vielleicht eine (?). Das ist eine Einstellungsfrage, weil Windows standardmäßig die Endungen von registrierten Dateitypen (und INI gehört dazu) ausblendet. Wenn
du allerdings diese INI-Datei selbst und
ohne Endung erstellt hast, dann habe ich nichts gesagt.
Wenn der Fehler jetzt immer noch bei
SectionExists kommt, dann fällt mir als Frage bloß noch ein: befindet sich der Code dieser Funktion
vor dem Code deines "Button7"? Da es sich bei meiner Adaption um keine Form-bezogene Funktion handelt, ist die Position schon wichtig. Notfalls probier das noch aus.
Bitte über Erfolg oder Misserfolg (dann vielleicht noch mit der genauen Fehlermeldung von Delphi) berichten. :)
Gruß.
Spurius - Fr 18.07.03 13:34
@ Brueggendiek
hallo,
Quelltext
1:
| ini.sectionexists(profil) |
geht auch nicht.
MfG
Spurius
Spurius - Fr 18.07.03 13:46
@ MathiasSimmack
hallo,
erstmal danke, dass du dich so bemühst, mir zu helfen!
Das mit der funktion was du geschrieben hast, hab ich davorgesetzt(vor button), aber der Fehler kommt trotztdem. Aber ich verstehe das auch nicht ganz, bin nämlich noch ziemlicher anfänger.
:oops: Naja, ich werd dann mal versuchen, irgendwie ne andre lösung zu finden. Wenn euch noch was einfällt, könnt ihr das ja hier posten.
MfG
Spurius
Tino - Fr 18.07.03 14:25
| Spurius hat folgendes geschrieben: |
| geht auch nicht. |
Wie geht nicht? Zeigt der Compiler eine Fehlermeldung oder wie kommst du darauf das das nicht geht?
Gruß
Tino
Spurius - Fr 18.07.03 14:31
ini.existsections(profil) geht nicht. Fehlermeldung undefinierter bezeichner
MfG
Spurius
Delete - Fr 18.07.03 15:51
Na ja, ich geh mal davon aus, dass du dich nur verschrieben hast, denn
existsections gibt´s ganz sicher nicht ... :wink: ... aber nutz doch mal die Codevervollständigung von Delphi. Dann weißt du 100% ob´s bei D3 diese Funktion schon gibt.
Also, rein in den Code, wo deine INI-Variable deklariert ist, eintippen
und kurz warten. Es sollte jetzt ein kleines Fenster mit allen Möglichkeiten für "ini" erscheinen. Dann tippst du die Anfangsbuchstaben von
SectionExists ein, und wenn in der Box was gefunden wird, dann wissen wir alle, dass du dich bloß vertippt hast. :)
Wenn nicht, dann gibt´s diese Funktion wohl erst ab Delphi 4/5, wobei mir aber nach wie vor schleierhaft ist, dass er nicht mal meine Funktion findet, wenn du sie vor dem INI-Code in die Form-Unit schreibst. Aber das kann sich IMHO eigentlich nur um einen Tippfehler handeln. Schau mal nach, ob der Name wirklich übereinstimmt. :wink: Geht nicht gegen deine Fähigkeiten oder so, aber ich habe auch schon mal stundenlang nach einem Fehler gesucht - bis ich dann merkte, dass ich zwei Buchstaben vertauscht hatte. :oops:
Spurius - Fr 18.07.03 17:21
Hallo,
also bei der autovervollständigung gibts SECTIONEXISTS nicht.
Trotz der function kommt die meldung: undef. bezeichner
Trotzdem vielen dank für die hilfe.
MfG
Spurius
Delete - Fr 18.07.03 22:04
Du wirst doch nicht etwa aufgeben wollen? :)
Jetzt poste doch mal die komplette Unit (*.pas) von deinem Formular. Von Anfang bis Ende. So, wie du es im Moment benutzt - auch wenn die o.g. Fehlermeldung kommt.
Tino wird´s verzeihen, denn notfalls kannst du den Code ja später (wenn wir den Fehler entweder gefunden haben oder völlig ratlos sind) wieder entfernen.
Spurius - Sa 19.07.03 11:59
Hallo nochmal,
ich hab das problem jetzt gelöst, indem ich in der ini-datei einen wert auslese und abhängig davon lösche oder nicht.
MfG
Spurius
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!