Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   ini Datei Verzeichnis? (https://www.delphipraxis.net/147081-ini-datei-verzeichnis.html)

Sanguis 1. Feb 2010 15:43


ini Datei Verzeichnis?
 
Hallo,

ich möcht einen String in eine INI Datei schreiben, das klappt auch. Allerdings möchte ich, das es im Verzeichnis eine Ebene höher gespeichert wird.
Ich nutze folgenden Code:

Delphi-Quellcode:
Ini := TIniFile.Create(form1.programmdirectory.Caption+'\..\game.ini');
Aber es wird immer ins Programmverzeichnis gespeichert, nicht eine Ebene höher. Ich versteh nicht warum.

Gruß,
Andreas

Teekeks 1. Feb 2010 15:45

Re: ini Datei Verzeichnis?
 
Probier mal das:
Delphi-Quellcode:
Ini := TIniFile.Create(form1.programmdirectory.Caption+'\game.ini');
EDIT:
Das .. sagt dem Pfad nämlich das es eine Ebene zurück gehen soll...
EDIT2:
Wenn dein Verzeichnis ".." heißt, benenne es um.

Der.Kaktus 1. Feb 2010 15:47

Re: ini Datei Verzeichnis?
 
Hallo,

schreib mal nur '..\game.ini' dann klappt es auch. :wink:

fatalerror 1. Feb 2010 16:09

Re: ini Datei Verzeichnis?
 
was steht in form1.programmdirectory.caption?

überprüfe mal mit
Delphi-Quellcode:
showmessage(ExpandFileName(form1.programmdirectory.Caption+'\..\game.ini'));
grundsätzlich ist deine Überlegung schon richtig.

himitsu 1. Feb 2010 16:23

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von Teekeks
EDIT2:
Wenn dein Verzeichnis ".." heißt, benenne es um.

Verzeichnisse und Dateien können unter Windows nicht nur aus Punkten bestehen
und . oder .. kann eh nichts heißen.

Teekeks 1. Feb 2010 17:09

Re: ini Datei Verzeichnis?
 
Hmmm stimmt wenn ich das unter Linux mache meint der auch ""bla/bla/blup/.." Existiert bereits!".
OK, dann nicht.

Christian Seehase 1. Feb 2010 17:31

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von Der.Kaktus
schreib mal nur '..\game.ini' dann klappt es auch. :wink:

Hast Du das ausprobiert?
Wenn man kein Verzeichnis angibt, landet die Datei im Windows-Verzeichnis.
In Deinem Beispiel müsste sie in der Ebene oberhalb des Arbeitsverzeichnisses angelegt werden.
Welches Verzeichnis das ist, lässt sich nicht vorhersagen.


Zitat:

Zitat von himitsu
Verzeichnisse und Dateien können unter Windows nicht nur aus Punkten bestehen

Das kann man so nicht sagen.
Diese Namen (. und ..) sind nur reserviert (. für das aktuelle, .. für das übergeordnete Verzeichnis) ;-)

Teekeks 1. Feb 2010 17:50

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von Christian Seehase
(. für das aktuelle, .. für das übergeordnete Verzeichnis) ;-)

Ist .. nicht für das Untergeordnete?

himitsu 1. Feb 2010 17:54

Re: ini Datei Verzeichnis?
 
Zitat:

Das kann man so nicht sagen.
Du kannst ja gern mal versuchen soeine Datei zu speichern, z.B. mit dem Namen "....." .

Teekeks 1. Feb 2010 18:05

Re: ini Datei Verzeichnis?
 
Unter Linux geht das...
Weiß allerdings nicht was Windows dazu sagt...

fatalerror 1. Feb 2010 18:27

Re: ini Datei Verzeichnis?
 
@himitsu

Zitat:

Zitat von himitsu
Verzeichnisse und Dateien können unter Windows nicht nur aus Punkten bestehen
und . oder .. kann eh nichts heißen.

.. können in delphi und windows sehr wohl verwendet werden um das übergeordnete Verzeichnis zu erreichen.


d.h.
Bsp.: c:\temp\test\..\temp1.jpg = c:\temp\temp1.jpg

Delphi-Quellcode:
showmessage(ExpandFileName('c:\temp\test\..\temp1.jpg'));
oder bsp2:
im Explorer
gib zb den Pfad c:\temp\test\..\ ein, du landest bei c:\temp\

himitsu 1. Feb 2010 18:30

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von fatalerror
.. können in delphi und windows sehr wohl verwendet werden um das übergeordnete Verzeichnis zu erreichen.

Es ging grad darum ein Verzeichnis so zu benennen


Ach übrigens, in FAT (bei ntfs weiß ich es nicht) sind das nicht nur Platzhalter ... diese Einträge gibt es da wirklich in der Verzeichnisliste.

fatalerror 1. Feb 2010 18:32

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von fatalerror
.. können in delphi und windows sehr wohl verwendet werden um das übergeordnete Verzeichnis zu erreichen.

Es ging grad darum ein Verzeichnis so zu benennen

falsch. es ging dem OP nich darum so ein Verzeichnis zu benennen, das hast erst du so interpretiert!

Teekeks 1. Feb 2010 18:36

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von fatalerror
Zitat:

Zitat von himitsu
Zitat:

Zitat von fatalerror
.. können in delphi und windows sehr wohl verwendet werden um das übergeordnete Verzeichnis zu erreichen.

Es ging grad darum ein Verzeichnis so zu benennen

falsch. es ging dem OP nich darum so ein Verzeichnis zu benennen, das hast erst du so interpretiert!

[OT]falsch, das war ich [/OT]

Aber wie wäre es wenn wir jetzt einfach warten bis der OP genauer sagt was er meint?

Sanguis 1. Feb 2010 18:43

Re: ini Datei Verzeichnis?
 
Guten Abend,

erstmal danke für die lebhafte Diskussion. Ist sehr Interessant.

Leider funktionieren eure Lösungsvorschläge nicht. Ich bekomme die Meldung "In grogrammdirectory..\game.ini kann nicht geschrieben werden". programmdirectory ist nur ein Label, in dem der Pfad zur exe steht. Komischerweise, wird das nicht umgewandelt, obwohl ich mich auf die Caption beziehe. Das macht mich ratlos...

Gruß,
Andreas

Edit: Ich möcht kein Verzeichnis so benennen sondern nur was in eine ini Datei oberhalb des Programmverzeichnis, schreiben.

Der.Kaktus 1. Feb 2010 18:45

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von Christian Seehase
Zitat:

Zitat von Der.Kaktus
schreib mal nur '..\game.ini' dann klappt es auch. :wink:

Hast Du das ausprobiert?
Wenn man kein Verzeichnis angibt, landet die Datei im Windows-Verzeichnis.
In Deinem Beispiel müsste sie in der Ebene oberhalb des Arbeitsverzeichnisses angelegt werden.
Welches Verzeichnis das ist, lässt sich nicht vorhersagen.


Zitat:

Zitat von himitsu
Verzeichnisse und Dateien können unter Windows nicht nur aus Punkten bestehen

Das kann man so nicht sagen.
Diese Namen (. und ..) sind nur reserviert (. für das aktuelle, .. für das übergeordnete Verzeichnis) ;-)

Jep,
Delphi-Quellcode:
showmessage(ExpandFileName('C:\windows\system32\..\game.ini'));
ergibt C:\Windows\game.ini :wink:

fatalerror 1. Feb 2010 18:57

Re: ini Datei Verzeichnis?
 
gewünschte Lösung:

Str_filename = ExpandFileName(ExtractFilePath(Application.exename )+'\..\game.ini');


(in der Regel ist dies aber nicht sinnvoll, es könnten Probleme mit den Schreibberechtigungen bestehen, suche hier in Forum wo Programmeinstellungen abgespeichert werden sollen).

Christian Seehase 1. Feb 2010 19:04

Re: ini Datei Verzeichnis?
 
Moin Kaki,

ich bezog mich auf das nur, wenn man
Delphi-Quellcode:
TIniFile.Create('..\game.ini');
schreibt.
;-)

Sanguis 1. Feb 2010 19:07

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von fatalerror
gewünschte Lösung:

Str_filename = ExpandFileName(ExtractFilePath(Application.exename )+'\..\game.ini');

Danke, das funktioniert.
Auch wenn ich nicht versteh, warum das nicht mit dem Label geht.

Gruß und nochmals Danke,
Andreas

Christian Seehase 1. Feb 2010 20:18

Re: ini Datei Verzeichnis?
 
Moin Andreas,

Zitat:

Zitat von Sanguis
Auch wenn ich nicht versteh, warum das nicht mit dem Label geht.

Das kann eigentlich nur daran liegen, dass im Label ein ungültiger, Pfad steht.

himitsu 1. Feb 2010 20:40

Re: ini Datei Verzeichnis?
 
Zitat:

grogrammdirectory..\game.ini
entweder in dem Label muß der Pfad mit "\" enden

oder vor das ".." muß noch ein "\" , also "\..\game.ini"

Sanguis 1. Feb 2010 20:55

Re: ini Datei Verzeichnis?
 
*grml* Jetzt wollte ich nur im OpenDialog den InitialPath eintragen, aber das geht auch nicht.

Delphi-Quellcode:
form1.bsSkinOpenDialog1.InitialDir := ExtractFilePath(Application.exename)+'..\';
Da bekomm ich "Error setting Path D:\usw."

Gruß,
Andy

Luckie 1. Feb 2010 21:08

Re: ini Datei Verzeichnis?
 
Was soll denn eigentlich das ständige rumgeeier mit den Punkten? Bau dir den Pfad als Zeichenkette sauber zusammen. Willst du ein Verzeichnis höher, dann schneide das letzte Verzeichnis von der Zeichenkette ab.

fatalerror 1. Feb 2010 21:10

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von Sanguis
*grml* Jetzt wollte ich nur im OpenDialog den InitialPath eintragen, aber das geht auch nicht.

Delphi-Quellcode:
form1.bsSkinOpenDialog1.InitialDir := ExtractFilePath(Application.exename)+'..\';
Da bekomm ich "Error setting Path D:\usw."

Gruß,
Andy

versuch es mal in etwa so (ungetestet)
Delphi-Quellcode:

  str_initdir:= ExpandFileName(ExtractFilePath(Application.exename)+'\..\') ;

if DirectoryExists(str_initdir) then
  dlgOpen1.InitialDir:= str_initdir
  else
  dlgOpen1.initialdir:= ExtractFilePath(Application.exename);

if dlgOpen1.execute then
  ....

himitsu 1. Feb 2010 21:21

Re: ini Datei Verzeichnis?
 
Laß hier mal das abschließende "\" (das am Ende, nach den "..") weg

Dir <> Path

Es kann aber sein, daß der Opendialog sowas nicht kennt.

Also, wie Luckie grad meinte:
Delphi-Quellcode:
File := ExtractFilePath(ExtractFileDir(Application.ExeName)) + 'settings.ini';

.InitialDir := ExtractFileDir(ExtractFileDir(Application.ExeName));

Sanguis 1. Feb 2010 21:23

Re: ini Datei Verzeichnis?
 
Gibt leider die gleiche Fehlermeldung.

Das letzte Verzeichnis abschneiden, geht nicht, weil das nicht vorher fest steht. Also auch die Länge nicht.

Luckie 1. Feb 2010 21:26

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von Sanguis
Das letzte Verzeichnis abschneiden, geht nicht, weil das nicht vorher fest steht. Also auch die Länge nicht.

Um was wollen wir wetten, das man die Länge jedes Verzeichnisses bestimmen kann? Rat mal wozu in einem Pfad das "\" Zeichen dient? Und guck dir himitsus Code noch mal genau an, wo brauchst du da die Länge?

Sanguis 1. Feb 2010 21:29

Re: ini Datei Verzeichnis?
 
Danke, ohne \ am Ende klappts :)
Man man man... es sind immer die vermeintlichen Kleinigkeiten, die aufhalten.

Gruß und Dank,
Andreas

Sir Rufo 1. Feb 2010 21:37

Re: ini Datei Verzeichnis?
 
Ansonsten hilft dir bei den relativen Pfadangaben Delphi-Referenz durchsuchenExpandFileName

Der.Kaktus 2. Feb 2010 03:57

Re: ini Datei Verzeichnis?
 
Zitat:

Zitat von Christian Seehase
Moin Kaki,

ich bezog mich auf das nur, wenn man
Delphi-Quellcode:
TIniFile.Create('..\game.ini');
schreibt.
;-)

Moin Christian,

mein "nur" bezog sich auf "ohne den fuehrenden Backslash in seinem dargelegtem Copdeschnippsel" ..soo..alles geklaert :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 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