![]() |
IniFile wird nicht erstellt
Mein Programm (bzw. die Initialization einer Unit) soll eine IniFile Config.ini anlegen und aus ihr den Wert der Farbe Workspace auslesen.
Doch es passiert nichts (nicht einmal die Datei wird erstellt). Könnt ihr mir helfen?
Delphi-Quellcode:
Workspace ist eine Variable aus einer anderen Unit, PaintGreen eine Konstante.
unit Windesk.ConfigReadWrite;
interface implementation uses IniFiles, Windesk.Colors; var INI : TIniFile; Vari: Variant; initialization INI := TIniFile.Create('Config.ini'); WorkSpace := INI.ReadInteger('Colors','Workspace',PaintGreen); finalization INI.WriteInteger('Colors','Workspace',Workspace); INI.Free; end. |
Re: Problem mit IniFile
Versuch es mal mit absoluten Pfaden.
|
Re: Problem mit IniFile
Geht auch nicht besser.
Delphi-Quellcode:
unit Windesk.ConfigReadWrite;
interface implementation uses IniFiles, Windesk.Colors, SysUtils,Forms; var INI : TIniFile; Vari: Variant; initialization INI := TIniFile.Create(ExtractFileDir(Application.Exename)+'\Config.ini'); Workspace := INI.ReadInteger('Colors','Workspace',PaintGreen); finalization INI.WriteInteger('Colors','Workspace',Workspace); INI.Free; end. |
Re: Problem mit IniFile
Und so?
Delphi-Quellcode:
Wobei eine Speicherung im Programmverzeichnis grundsätzlich keine gute Idee ist. Spätestens ab Vista hast Du schlicht keine Berechtigung dazu.
INI := TIniFile.Create(IncludeTrailingPathDelimiter(ExtractFilePath(Application.Exename))+'Config.ini');
|
Re: Problem mit IniFile
Zitat:
![]() ![]() Grüße |
Re: Problem mit IniFile
Zitat:
|
Re: Problem mit IniFile
In der Uralt-Hilfe ok, aber in der neueren habe ich das nicht so schwammig formuliert in Erinnerung. ;)
Aber gut, der Aufruf schadet nicht, das ist richtig. Edit: Ich kann mich natürlich auch irren, habe Delphi noch nicht installiert. *duck* |
Re: Problem mit IniFile
Geht immer noch nicht.
Delphi-Quellcode:
unit Windesk.ConfigReadWrite;
interface implementation uses IniFiles, Windesk.Colors, SysUtils,Forms; var INI : TIniFile; Vari: Variant; initialization INI := TIniFile.Create(ExtractFileDir(Application.Exename)+'Config.ini'); Workspace := INI.ReadInteger('Colors','Workspace',PaintGreen); finalization INI.WriteInteger('Colors','Workspace',Workspace); INI.Free; end. |
Re: Problem mit IniFile
Bist Du mal durchgesteppt?
|
Re: Problem mit IniFile
Nein
Hab ich noch nie gemacht Ich versuchs mal ------------------- das hat mich irgendwie nicht weiter gebracht |
Re: Problem mit IniFile
Angenommen du hast Schreibrechte. Stimmt denn der Pfad, wenn du ihn dir einmal ausgeben lässt?
Ich würde die Datei übrigens nur so lange öffnen wie du sie brauchst und Ressourcenschutzblöcke verwenden:
Delphi-Quellcode:
Was wird denn ausgegeben, wenn du nach dem Ini-Versuch das hier ausgeben lässt:
// auslesen:
Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Config.ini'); try Workspace := Ini.ReadInteger('Colors', 'Workspace', PaintGreen); finally FreeAndNil(Ini); end; // schreiben: Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Config.ini'); try Workspace := Ini.WriteInteger('Colors', 'Workspace', Workspace); finally FreeAndNil(Ini); end;
Delphi-Quellcode:
Grüße, Matze
ShowMessage(SysErrorMessage(GetLastError));
|
Re: Problem mit IniFile
Der Pfad stimmt.
Und es gibt auch keinen Fehler. |
Re: Problem mit IniFile
Hm, dann müsste aber eigentlich alles gehen, wenn nicht einmal
![]() Wird der Code sicher auch aufgerufen? Sonst teste es doch mal im OnCreate, falls es das bei dir geben sollte. |
Re: Problem mit IniFile
Zitat:
|
Re: Problem mit IniFile
Könntest du bitte dem Beitrag einen aussagekräftigeren Titel geben? Bei IniFiles kann es recht viele Probleme geben. Ein aussagekräftigerer Titel hat den Vorteil das andere mit gleichem Problem diesen Beitrag später über die Suche schneller finden und somit auch die eventuelle Lösung. Zudem hat es für dich den Vorteil das anhand eines aussagekräftigen Titels die Leute sofort wissen ob sie eventuell helfen können und entsprechend das Thema anschauen :)
|
Re: Problem mit IniFile
@Matze: Es wird jetzt eine Meldung ausgegeben, wenn der Code ausgeführt wird.
Und sie erscheint. Der Code wird also aufgerufen. @Luckie: 1. Was meinst du mit schließen. Es wird FreeAndNil aufgerufen. Ansonsten nichts. 2. Ich arbeite unter Windows XP, und das Programm ist unter D: |
Re: Problem mit IniFile
Zitat:
|
Re: IniFile wird nicht erstellt
Ja
|
Re: IniFile wird nicht erstellt
Dann sehe ich keinen Grund, warum das mit einer Ini-Datei nicht funktionieren sollte. Zeig noch mal deine aktuellen Code zum Schreiben und Lesen.
|
Re: IniFile wird nicht erstellt
Delphi-Quellcode:
initialization
Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Config.ini'); ShowMessage(ExtractFilePath(Application.Exename) + 'Config.ini'); try Workspace := Ini.ReadInteger('Colors', 'Workspace', PaintGreen); finally FreeAndNil(Ini); end; finalization Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Config.ini'); try Ini.WriteInteger('Colors', 'Workspace', Workspace); finally FreeAndNil(Ini); end; end. |
Re: IniFile wird nicht erstellt
Und es wird keine Datei erstellt? Und wenn du das in einem ButtonClick Ereignis ausführst?
|
Re: IniFile wird nicht erstellt
Geht immer noch nicht.
Ich hab das OnClick-Event von TGraphicControl benutzt |
Re: IniFile wird nicht erstellt
Delphi-Quellcode:
Überprüf mal im Debugger den Wert von Workspace.
Ini.WriteInteger('Colors', 'Workspace', Workspace);
|
Re: IniFile wird nicht erstellt
Moin, Moin.
Da das Ganze so seltsam ist, habe ich es mal nachgestellt - das funktioniert bei mir einwandfrei!? |
Re: IniFile wird nicht erstellt
Gib ihm mal deinen Code zum Testen. Dass der Wert von Workspace ungültig ist und deswegen nichts geschrieben wird, ist auch meine letzte Hoffnung.
|
Re: IniFile wird nicht erstellt
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry, hatte gerade keine Zeit.
Anbei das Testprogramm... |
Re: IniFile wird nicht erstellt
Haltepunkte hast Du schon probiert, d.h. die entsprechenden Stellen werden auch tatsächlich angesprungen?
|
Re: IniFile wird nicht erstellt
Hallo,
was wird denn hier ausgegeben?
Delphi-Quellcode:
initialization Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Config.ini'); ShowMessage(ExtractFilePath(Application.Exename) + 'Config.ini'); try try Workspace := Ini.ReadInteger('Colors', 'Workspace', PaintGreen); ShowMessage('Workspace ist: ' + IntToStr(Workspace)); except on e : Exception do begin ShowMessage('Es ist ein Fehler beim Lesen aufgetreten: ' + e.Message); end; end; finally FreeAndNil(Ini); end; finalization Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Config.ini'); try Try Ini.WriteInteger('Colors', 'Workspace', Workspace); ShowMessage('Workspace ist: ' + IntToStr(Workspace)); except on e : Exception do begin ShowMessage('Es ist ein Fehler beim Schreiben aufgetreten: ' + e.Message); end; end; finally FreeAndNil(Ini); end; end. |
Re: IniFile wird nicht erstellt
@Luckie: Der Wert von Workspace (Variable von TColor) soll dem Plan nach im ersten Teil gesetzt werden. Wenn das nicht funktioniert - dann müsste der Wert entweder 0 (Standardwert) oder PaintGreen (angegeben) sein.
@taaktaak: Bei dir funktioniert er? Bei mir nicht. Es scheint also nicht am Code zu liegen. @DeddyH: Ja, es wird alles angesprungen. @nahpets: Der sagt mir Workspace sei 0. In ReadInteger scheint also gar nichts zu passieren. Ansonsten wäre es ja zumindest der Wert von PaintGreen. Eine Exception wird nicht ausgelöst.
Delphi-Quellcode:
var Workspace : TColor; // in Unit Windesk.Colors
const PaintGreen = $00ddffdd; |
Re: IniFile wird nicht erstellt
Hallo,
Zitat:
Weise dem ReadInteger mal einen festen Vorgabewert zu und schau dann, ob immernoch die 0 geliefert wird. Wenn ja, muss die aus irgendeiner INI gelesen werden, dann hilft Dir (vermutlich) nur, mal die Festplatte nach 'ner Config.ini zu durchsuchen.
Delphi-Quellcode:
initialization
Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Config.ini'); ShowMessage(ExtractFilePath(Application.Exename) + 'Config.ini'); try try Workspace := Ini.ReadInteger('Colors', 'Workspace', 4711); // <- festen Vorgabewert zuweisen ShowMessage('Workspace ist: ' + IntToStr(Workspace)); // wenn 0, muss es irgendwo die INI-Datei geben!!! // und jetzt noch mal 'nen Test mit einem Wert, den es höchstwahrscheinlich nicht gibt: Workspace := Ini.ReadInteger('IstDochEgalWasHierSteht', 'HauptsacheGibtEsNicht', 4812); ShowMessage('Workspace ist: ' + IntToStr(Workspace)); // Hier sollte jetzt aber als Ergebnis 4812 kommen!!! except on e : Exception do begin ShowMessage('Es ist ein Fehler beim Lesen aufgetreten: ' + e.Message); end; end; finally FreeAndNil(Ini); end; finalization Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Config.ini'); try Try Ini.WriteInteger('Colors', 'Workspace', Workspace); ShowMessage('Workspace ist: ' + IntToStr(Workspace)); except on e : Exception do begin ShowMessage('Es ist ein Fehler beim Schreiben aufgetreten: ' + e.Message); end; end; finally FreeAndNil(Ini); end; end. |
Re: IniFile wird nicht erstellt
Wie erwartet kam beim ersten 0, beim zweiten 4812 raus.
Aber der Pfad stimmt. Was ist dann das Problem? |
Re: IniFile wird nicht erstellt
Hallo,
Zitat:
Wenn Du keine findest, dann ändere mal den Namen der INI-Datei auf c:\temp\meine.ini und schau nach, ob diese Datei dann erstellt bzw. gelesen wird. |
Re: IniFile wird nicht erstellt
Also ich weiß nicht warum, aber von einer Minute auf die andere funktioniert es.
Jetzt ist in dem Ordner auch eine Config.ini Au0erdem ist in dem übergeordneten Ordner eine WindeskConfig.ini Es siehtso aus, als fehle da nur der Backslash (Windesk\Config.ini) In der WindeskConfig.ini steht der Wert von PaintGreen. In der Config.ini steht 4812. Ich bin verwirrt. |
Re: IniFile wird nicht erstellt
Zitat:
|
Re: IniFile wird nicht erstellt
ExtractFilePath sollte eigentlich den Backslash liefern. Zur Sicherheit könnte man das überprüfen und ggf. den Backslash manuell einfügen
|
Re: IniFile wird nicht erstellt
Hallo,
das heißt, dass hier mal irgendwas schiefgegangen ist:
Delphi-Quellcode:
Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Config.ini');
Delphi-Quellcode:
Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + '\Config.ini');
|
Re: IniFile wird nicht erstellt
Hi!
Wäre es dann nicht besser IncludeTrailingPathDelimeter zu nutzen, anstatt einfach nen \ zu schreiben? Ciao, Frederic |
Re: IniFile wird nicht erstellt
Sagt dir "WinDesk" denn irgendetwas? Hast du vielleicht irgendwas gleichnamiges auf deinem Rechner laufen z.B. als Desktop-Widget oder so? Es scheint nämlich so zu sein, daß Application.ExeName nicht immer den gleichen Wert zurückliefert, wenn es im initialization oder finalization Teil aufgerufen wird.
|
Re: IniFile wird nicht erstellt
Zitat:
Delphi-Quellcode:
Da das so lange ist, packt man es gleich in eine Funktion:
Ini := TIniFile.Create(IncludeTrailingPathDelimiter(ExtractFilePath(Application.Exename)) + 'Config.ini');
Delphi-Quellcode:
function ExePath: string
begin Result := IncludeTrailingPathDelimiter(ExtractFilePath(Application.Exename)); end; // Aufruf Ini := TIniFile.Create(ExePath + 'Config.ini'); |
Re: IniFile wird nicht erstellt
Zitat:
Den IncludeTrailingPathDelimeter hatten wir ja schon oben im Thread und der hat das Problem auch nicht gelöst, irgendwie befremdlich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:50 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