Autor Beitrag
greeger
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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.

ausblenden 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...

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: Mo 31.03.08 18:17 
Probier's mal mit Anführungszeichen drumrum, also if FileExists('"C:\Datei test.exe"').
greeger Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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"
ausblenden 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);//Hier wählt der Benutzer die INI Datei aus
  parameterx1:=Initest.ReadString('Allgemein','Prog','');//Hier Pfad zur beliebigen Anwendung in der INI Datei
    if FileExists(parameterx1) then //Hier prüfe ich ob es das file gibt
      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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 31.03.08 19:49 
Und
ausblenden 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? :eyecrazy:

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
greeger Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 02.04.08 19:53 
user profile icongreeger 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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)


ausblenden 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:
//--------------------------------------------
// INI Dateien laden und speichern
//--------------------------------------------


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:

ausblenden Delphi-Quelltext
1:
uses iNIFiles;					



nun kannst du mit dem befehl die ini aufrufen
ausblenden Delphi-Quelltext
1:
DoReadINI('DEINFILENAME.ini','SUCHENDER TEXT in [KLAMMERN]','DEN WERT DES TEXTES'); //Rückgabewert ist das was hinter dem = dann steht					




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

ausblenden Delphi-Quelltext
1:
DoReadINI('system.ini','Visual','shadow');  //Rückgabe hier würde die 0 sein denn das was hinter dem = steht wird genommen egal ob leerzeichen oder sonst was					



ich hoffe hab dir geholfen
fuba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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.