Entwickler-Ecke
Dateizugriff - File wird nicht erkannt
Mitmischer 1703 - Do 04.02.10 20:00
Titel: File wird nicht erkannt
Hi DF!
Ich stehe momentan vor einem für mich unlösbaren Problem. Ich habe im Programmverzeichnis ein INI-File, Setup.ini. Dieses File existiert DEFINITIV, aber ich bekomme jedes Mal eine Exception geworfen (verwende Windows 7):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TMainForm.FormCreate(Sender: TObject); var Ini : TIniFile; PhraseCount : Integer; I: Integer; begin try PerformSysCheck; ShowmEssage(ExtractFilePath(ParamStr(0))+'Setup.ini'); if not FileExists(ExtractFilePath(ParamStr(0))+'Setup.ini') then raise Exception.Create('File not found'); Ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'Setup.ini'); PhraseCount := Ini.ReadInteger('Options', 'PhraseCount', -1); SetLength(FPhrases, PhraseCount); for I := 0 to PhraseCount - 1 do FPhrases[I] := Ini.ReadString('Phrases', IntToStr(I), 'Error'); PageControl1.SelectNextPage(true, false); SetLength(Labels, 8); Labels[0] := Welcome; Labels[1] := Sys_Check; Labels[2] := Setuptype; Labels[3] := Path; Labels[4] := Components; Labels[5] := Summary; Labels[6] := Install; Labels[7] := Lbl_ready; except ShowMessage(StrErrorDuringInit); Application.Terminate end; end; |
Was kann ich da machen?
Gausi - Do 04.02.10 20:29
Bekommst du die FileNotFound-Exception, oder eine andere? Ich vermute nämlich letzteres.
TIniFile verwendet ja die Windows-Inifile-API, und es kann gut sein, dass da unter Win7 mit den Zugriffsrechten was schiefläuft, wenn dein Programm im Programme-Ordner liegt (C:\program files\ ...).
Mit TMemIniFile sollte der (Lese)zugriff klappen, probier das mal aus.
DonManfred - Fr 05.02.10 15:06
Mitmischer 1703 hat folgendes geschrieben : |
Hi DF!
Delphi-Quelltext 1:
| ShowmEssage(ExtractFilePath(ParamStr(0))+'Setup.ini'); |
Was kann ich da machen? |
AFAIK ist ParamStr(0) der Pfad UND Dateiname der eigenen EXE... Demnach suchst Du also z.B. nach C:\Programme\Testprogramm\test.exeSetup.ini
Ungetestet; hab ich grad so im Kopf...
Ich hol mir den Pfad immer mit
Delphi-Quelltext
1: 2: 3:
| own_path := ExtractFilePath(Application.ExeName); if own_path[Length(own_path)] <> '\' then own_path := own_path + '\'; |
Hope it helps
FinnO - Fr 05.02.10 16:16
nope. der extractfilepath ist schon korrekt.
platzwart - Fr 05.02.10 17:11
Also ich benutze das auch immer so: ExtractFilePath(ParamStr(0))+'\data\data.dat'
FinnO - Fr 05.02.10 18:24
Delphi-Quelltext
1:
| showmessage(extractFilePath(ParamStr(0))); |
liefert bei mir in Delphi 2010 ein Ergebnis MIT schließendem Backslash.
DonManfred - Fr 05.02.10 19:07
FinnO hat folgendes geschrieben : |
nope. der extractfilepath ist schon korrekt. |
Ok, kann durchaus sein, das ich den Code so in der Form schon seit Jahren (und über diverse Delphi-Versionen hinweg) benutze... Ich muss da mal probleme gehabt haben ;)
*nachguck* Yo, laut Doku (Delphi 2006) liefert ExtractFilePath den Pfad mit abschliessendem Backslash.
Dann wäre es interessant, WELCHE exception gemeldet wird (wurde weiter oben ja auch schonmal angefragt).
Mitmischer 1703 - Fr 05.02.10 19:12
Die geworfene Exception ist meine eigene ;)
Hab's vielleicht missverständlich ausgedrückt, aber ich werfe - wenn die INI nicht da ist eine Exception.
Und ich den Test rausfallen lasse, geht das Createn der INI gut - doch bei PhraseCount gibts den Default-Wert!
Hab meine INI mal hochgeladen - ist da was falsch?
Edit: Mom, glaub, ich hab meinen Fehler gefunden
Tatsächlich... Ich hatte "Erweiterungen bei bekannten Dateitypen ausblenden an" :wand:
Jetzt müsste der Code eig funzen, wenn nicht, meld ich mich nochmal!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!