Entwickler-Ecke

Dateizugriff - Problem mit mit dem festlegen eines Verzeichnis


Henry - Do 04.09.03 16:14
Titel: Problem mit mit dem festlegen eines Verzeichnis
Hallo,

ich habe folgendes Problem: in meinem Programm lege ich mit

Delphi-Quelltext
1:
  Pfad := ExtractFilePath(paramstr(0));                    

den Standartpfad für die Dateien die ich zur Laufzeit erzeugen lasse fest. Nun möchte ich aber meine Programmdateien im Programmverzeichnis in einem eigenen Ordner z.B. \bin ablegen und die Dateien im Programmverzeichnis ebenfalls in eigene Ordner ablegen.

Dadurch kann ich ja nicht mehr mit dem oben gezeigten Code arbeiten. Wie kann ich ein Verzeichnis höher gehen (also von meinem Pfad ins Programmverzeichnis)?

Kann mir da jemand helfen, habe in der Hilfe nichts gefunden. Ich hoffe ich habe es einigermaßen verständlich geschrieben :D

PS: Habe schon Probiert mit ../ vor meiner Pfadangabe, hat aber nicht geklappt.


Delete - Do 04.09.03 16:40
Titel: Re: Problem mit mit dem festlegen eines Verzeichnis
Henry hat folgendes geschrieben:
Nun möchte ich aber meine Programmdateien im Programmverzeichnis in einem eigenen Ordner z.B. \bin ablegen und die Dateien im Programmverzeichnis ebenfalls in eigene Ordner ablegen.

Darüber würde ich noch mal nachdenken. An sich spricht nichts gegen die Idee, aber in Mehrbenutzerumgebungen greifen alle angemeldeten Benutzer dann auf die selben Dateien zu (schlecht bei privaten, gespeicherten Infos), unter NT-Systemen kann es aber auch (auf Grund eingeschränkter Rechte des jeweiligen Benutzers) zu Problemen beim Erstellen dieser Dateien kommen. Dazu könnte ich ein Beispiel nennen, bei dem beides passiert ist, aber das wäre unfair, weil derjenige das Problem mittlerweile kennt und sicher auch beheben wird.

Zitat:
Wie kann ich ein Verzeichnis höher gehen (also von meinem Pfad ins Programmverzeichnis)?

Na ja, entweder den umständlichen Weg, indem du das ermittelte Verzeichnis als Arbeitsverzeichnis setzt, dann eins höher springst und das übergeordnete Verzeichnis ermittelt

Delphi-Quelltext
1:
2:
3:
SetCurrentDir(ExtractFilePath(paramstr(0)));
ChDir('..');
szDummy := GetCurrentDir;

oder du bemühst copy und ermittelst aus dem Pfad der Anwendung das übergeordnete Verzeichnis:

Delphi-Quelltext
1:
2:
3:
4:
5:
szDummy := ExtractFileDir(paramstr(0));
i := length(szDummy);
while not(szDummy[i] in['\',':']) do dec(i);

ShowMessage(copy(szDummy,1,i));

Als Beispiel. Kann man sicher noch eleganter machen.

PS: Weil "ExtractFilePath" den schließenden Backslash liefert, solltest du vielleicht "ExtractFileDir" benutzen, oder du entfernst den Backslash am Ende, bevor du die paar Beispielzeilen aufrufst.


Henry - Do 04.09.03 18:51

Danke Dir!

Ich werde mir mal beides etwas genauer betrachten und probieren für welche Möglichkeit ich mich entscheide.

Bei Deinen Ausführungen taucht wieder eine interessante Frage bei mir auf :)
Wie bekomme ich den den Ordner mit den Anwendungsdaten des jeweiligen Users heraus um meine Daten dort zu speichern?
Laufen diese Programme die die Anwendungsdaten in diesem Ordner Speichern auch noch auf Win98?


Delete - Do 04.09.03 20:26

FAQs lesen:

Spezielle Windows-Ordner ermitteln [http://www.delphi-forum.de/viewtopic.php?t=11390]
eine Anwendung aus Autostart starten lassen [http://www.delphi-forum.de/viewtopic.php?t=11510]

wobei du speziell in letzterem Beitrag an den "String" des gesuchten Ordners herankommst (s. Funktion "SpecialDirectory"). Was die Kompatibilität angeht, da kann ich dir nur das PSDK (bzw. das MSDN [http://msdn.microsoft.com]) von Microsoft ans Herz legen. Bei den CSIDL-Konstanten stehen meist Versionsangaben dabei. Bei 4.7x kannst du davon ausgehen, dass es auch unter 9x und NT4 funktioniert. Bei höheren Nummern sollte man vorsichtig sein. Ich weiß, dass einige von den Konstanten Leerstrings unter 98 zurückliefern. Die sind dann auf die jeweiligen Betriebssysteme beschränkt.

CSIDL_xxx-Konstanten gelten für den jeweils angemeldeten Benutzer. CSIDL_COMMON_xxx für alle angemeldeten Benutzer.

Gruß.


Henry - Do 04.09.03 21:47

Danke Dir auch für diese Information.

Die Sache mit dem übergeordneten Verzeichnis habe ich mit der ersten
von Dir aufgezeigten Möglichkeit gelöst, sie erschien mir für mich am
optimalsten.