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 Suche in: Delphi-Forum, Delphi-Library FILEEXISTS prüfst, ob sie da ist? :roll:

Moderiert von user profile iconTino: 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 Suche in: Delphi-Forum, Delphi-Library DELETEFILE doch besser?

Moderiert von user profile iconTino: 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 <> nilthen try
    if(SectionExists(ini,'windows')) then
      ShowMessage('yo');
  finally
    ini.Free;
  end;


Delete - Do 17.07.03 16:20

Siehe hier:
user defined image
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

Delphi-Quelltext
1:
ini : TIniFile;                    

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

Delphi-Quelltext
1:
ini.                    

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