Autor Beitrag
Henry
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: Do 04.09.03 16:14 
Hallo,

ich habe folgendes Problem: in meinem Programm lege ich mit
ausblenden 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.

_________________
mfg Henry
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 04.09.03 16:40 
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
ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: 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?

_________________
mfg Henry
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 04.09.03 20:26 
FAQs lesen:

Spezielle Windows-Ordner ermitteln
eine Anwendung aus Autostart starten lassen

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) 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: 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.

_________________
mfg Henry