Autor |
Beitrag |
greeger
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 31.03.08 18:10
Hallo,
erneut stellt sich mir eine Frage mit dem Umgang von INI-Dateien.
Mein Programm soll aus einer bestehenden INI Datei und dem in dieser Datei angegebene Pfad zu einer Exe auslesen und in einem Label anzeigen. Wenn der Pfad nicht erxestiert wird dies in der Oberfläche kenntlich gemacht.
Dieses funktioniert auch bei mir jedoch nicht mit Exe-Namen die aus zwei oder mehr Wörtern bestehen z.B. Microsoft Word.exe
Wenn die Exe lediglich Word.exe benannt ist zeigt mein Programm das Ordnungsgemäß an.
Das folgende Beispiel kommt nicht aus meinem Quelltext beschreibt aber mein Problem.
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin if FileExists('C:\Datei.exe') then Showmessage('Datei vorhanden'); end; |
Wenn das Programmaufruf aber so Aussieht geht dies nicht...
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin if FileExists('C:\Datei test.exe') then Showmessage('Datei vorhanden'); end; |
Hat da jemand eine Idee zu wie ich das Leerzeichen ignorieren kann?
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: Mo 31.03.08 18:17
Probier's mal mit Anführungszeichen drumrum, also if FileExists('"C:\Datei test.exe"').
|
|
greeger 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 31.03.08 18:28
Leider ist das nicht so einfach...
Die INI-Dateien sind nicht von mir erstellt worden d.h. mein Programm macht folgendens vielleicht wird es "klarer"
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| Initest:=TIniFile.Create(form1.edt_p_ini_pfad.text); parameterx1:=Initest.ReadString('Allgemein','Prog',''); if FileExists(parameterx1) then begin form1.Img_prog_false.Visible:=false; form1.Img_prog_ok.Visible:=true; form1.l_p_e_prog.Caption:=parameterx1; end else begin form1.Img_prog_false.Visible:=true; form1.Img_prog_ok.Visible:=false; form1.img_prog_false.ShowHint:=true; form1.img_prog_false.Hint:='Bitte angegebene Pfad zum Programm prüfen'; form1.l_p_e_prog.Caption:=parameterx1; end; |
in der INI Datei kann also alles mögliche drin stehen.
Wenn in der INI Datei z.B. c:\Programme\notepad.exe" drin steht sagt mein Programm die Datei gibt es (obwohl das nicht stimmt wegen den ")
Ein weiteres Problem ist das angegebene c:\Programme\ms notepad.exe hier geschieht das gleiche wegen dem Leerzeichen.
Wenn aber z.B. c:\Programme"\ms notepad.exe drin steht dann bekomme ich die richtige Meldung
|
|
galagher
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 31.03.08 18:40
Kann es sein, dass dir QuotedStr weiterhilft?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
greeger 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 31.03.08 18:49
Habe es gerade mal ausprobiert. Leider keinen Erfolg.
Hab mal einem Label den Wert zugewiesen damit ich weiß was in der Variablen drin stehet.
Es wird zwar durch die Funktion QuotedStr ein (') am Anfang und ein (') am ende zu gefügt jedoch steht dann in der Variablen 'c:\programme\ms notepad.exe'
diesen Pfad gibt es natürlich nicht und folglich sagt mein Programm der angegebene Pfad zur EXE stimmt nicht.
***Haare rauf***
|
|
galagher
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 31.03.08 19:49
Und
Delphi-Quelltext 1:
| if (FileExists('"Die ausgelesene Datei"')) or (FileExists('Die ausgelesene Datei')) |
Geht das?
Ansonsten muss ich sagen: Pfad ist Pfad, bei Leerzeichen " verwenden... Oder? 
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
greeger 
Hält's aus hier
Beiträge: 8
|
Verfasst: Di 01.04.08 11:04
Hallo galagher,
leider brachte deine Idee nicht den gewünschten Erfolg.
Ich muss eine andere Lösung finden. Es ist wichtig ob das Programm mit anzeigt ob der Pfad + die EXE Datei tatsächlich, wie in der INI-Datei eingetragen, vorhanden ist.
Aber trozdem mal danke bis hier her...
Falls ich eine Lösung gefunden habe poste ich die mal hier...
mfg greeger
PS.: falls natürlich jemand anderes noch eine Idee hat probiere ich die gerne mal...
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 01.04.08 11:22
Also ich kann das nicht nachvollziehen, bei mir funktioniert FileExists korrekt, egal ob mit oder ohne Leerzeichen...
Welche Delphi- und Windows-Version benutzt du?
|
|
greeger 
Hält's aus hier
Beiträge: 8
|
Verfasst: Di 01.04.08 12:00
Hallo,
ich nutze Delphi7 und WXP SP2.
Anbei mal den Auszug aus der INI_Datei und den entsprechnden Screenshot meines Programmes. Vielleicht hilft das.
//Start INI-Datei
[Allgemein]
Prog = C:\custo\custo med\Exe\custo manager.exe
//noch weitere Einträge in der INI Datei
Und hier der Screenshot
Wenn ich aber den Programmaufruf in der INI-Datei wie folgt anpasse
//Start INI Datei
[Allgemein]
Prog = C:\custo\custo med\Exe\custo manager.exe"
dann sagt mein Programm das der Pfad und dir EXE exestieren. Siehe INI2-jpg
Einloggen, um Attachments anzusehen!
|
|
greeger 
Hält's aus hier
Beiträge: 8
|
Verfasst: Di 01.04.08 15:20
Mal ne Frage,
kann es sein das Fileexist nur auf drei Stellen hinter dem Punkt schaut? Also z.B. *.123
Wenn das so wäre dann würde das mein Problem erkären.
|
|
galagher
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 02.04.08 19:53
greeger hat folgendes geschrieben: | kann es sein das Fileexist nur auf drei Stellen hinter dem Punkt schaut? Also z.B. *.123 |
Nein. Datei D:\Delphi6\Projects\1234567890.1234567890 erstellt und getestet mit
Delphi-Quelltext 1: 2:
| if FileExists('D:\Delphi6\Projects\1234567890.1234567890') then Memo1.Lines.LoadFromFile('D:\Delphi6\Projects\1234567890.1234567890'); |
- und es funktionierte.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 04.04.08 06:11
Also bei mir funktioniert es mit Delphi 7 genauso wie mit Delphi 2006, auch mit einer Ini-Datei, ich kann das ebenfalls nicht nachvollziehen. Könntest du vielleicht ein Testprojekt anhängen bitte?
|
|
SiegfriedXX
      
Beiträge: 26
|
Verfasst: Mo 07.04.08 00:27
Diesen post bitte löschen hab ausversehen doppelt gepostet und sehe keine löschfunktion schade
Zuletzt bearbeitet von SiegfriedXX am Mo 07.04.08 00:30, insgesamt 1-mal bearbeitet
|
|
SiegfriedXX
      
Beiträge: 26
|
Verfasst: Mo 07.04.08 00:28
Hier die lösung womit es gehen sollte
binde als aller erstes funktionen und prozedur ein (eine zum lesen und eine zum schreiben von ini dateien falls dud as auch bruachst)
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:
|
function TForm1.DoReadINI(const strFile,strWhichSection,strString:string): string; var ReadINI : TINIFile; begin try ReadINI := TINIFile.Create(strFile); result := ReadINI.ReadString(strWhichSection, strString, 'Default'); finally ReadINI.Free; end; end;
procedure TForm1.DoWriteINI(const strFileWRI,strWhichSectionWRI,strNameWRI,strStringWRI:string); var WriteINI : TINIFile; begin try WriteINI := TINIFile.Create(strFileWRI); WriteINI.WriteString(strWhichSectionWRI, strNameWRI, strStringWRI); finally WriteINI.Free; end; end; |
in die uses kommt folgendes:
Delphi-Quelltext
nun kannst du mit dem befehl die ini aufrufen
Delphi-Quelltext 1:
| DoReadINI('DEINFILENAME.ini','SUCHENDER TEXT in [KLAMMERN]','DEN WERT DES TEXTES'); |
die ini datei könnte so aussehen DATEINAME is mal system.ini
[Visual]
HIGH_EFFECT=0
HIGH_EFFECT2=0
POSTPROCESS_BRIGHTNESS=32
TEXTURELOD=0
WATEREFFECT=0
GRASSRENDERING=0
SHADOW=0
RESOLUTIONWIDTH=800
RESOLUTIONHEIGHT=600
TERRAINLOD=0
GAMMA=0
nun könnte man also nach den einzelnen zahlen suchen z.b. Shadow
Delphi-Quelltext 1:
| DoReadINI('system.ini','Visual','shadow'); |
ich hoffe hab dir geholfen
|
|
fuba
      
Beiträge: 125
Win7
D7 Ent.
|
Verfasst: Sa 07.06.08 10:37
hallo greeger,
ich habe mal 2 Dateien auf C: erstellt "Datei.exe" und "Datei Test.exe"
Also 1x mit Leerzeichen und 1x ohne.
Meine Test ini sieht so aus:
Quelltext 1: 2: 3: 4: 5:
| ;inhalt der Datei Project1.ini [Files] File1 = C:\Datei.exe File2 = C:\Datei test.exe File3 = C:\Programme\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll |
mein code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Ini := TIniFile.Create(changefileext(paramstr(0), '.ini')); with ini do begin if FileExists(ReadString('Files', 'File1', '')) then showmessage('File1 gefunden') else showmessage('File1 nicht gefunden'); if FileExists(ReadString('Files', 'File2', '')) then showmessage('File2 gefunden') else showmessage('File2 nicht gefunden');
if FileExists(ReadString('Files', 'File3', '')) then showmessage('File3 gefunden') else showmessage('File3 nicht gefunden'); end; Ini.Free; |
und bei mir funktioniert das auch mit Leerzeichen ohne probleme.
|
|