Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Aktuelles Verzeichnis (https://www.delphipraxis.net/74285-aktuelles-verzeichnis.html)

Martin K 31. Jul 2006 22:49


Aktuelles Verzeichnis
 
Hi,

wie erhalte ich das aktuelle Verzeichnis?
Also allgemein das Verzeichnis, nicht speziell auf eine Anwendung bezogen wie GetCurrentDir.

Bei mir ist das aktuelle Verzeichnis (wenn ich bei Start->Ausführen "" eingebe) identisch mit %HomePath%, also:
C:\Dokumente und Einstellungen\Martin Kluge

Ist das immer so ?
Wie kann ich generell das aktuelle Verzeichnis mit Delphi auslesen ?

Luckie 31. Jul 2006 22:52

Re: Aktuelles Verzeichnis
 
GetCurrentDir liefert das aktuelle Verzeichnis.

Martin K 31. Jul 2006 22:55

Re: Aktuelles Verzeichnis
 
:shock: GetCurrenDir liefert mir das Verzeichnis, in dem meine Anwendung gestartet wurde.

z.B. Wenn ich die Eingabeaufforderung starte, ist das Verzeichnis auch immer
C:\Dokumente und Einstellungen\Martin Kluge.
Oder über Start->Ausführen :gruebel:

Christian Seehase 31. Jul 2006 22:59

Re: Aktuelles Verzeichnis
 
Moin Martin,

Zitat:

Zitat von Martin K
GetCurrenDir liefert mir das Verzeichnis, in dem meine Anwendung gestartet wurde.

dann benutze mal eine Öffnen- oder Speicherndialog mit Auswahl einer Datei aus einem anderen Verzeichnis, und lass' Dir dann noch mal das akutelle Verzeichnis mit GetCurrentDir anzeigen.

[EDIT]
Oder starte das Programm über einen Link oder ShellExecuteEx, wobei Du das Arbeitsverzeichnis angibst.
Natürlich darf das Arbeitsverzeichnis nicht das des Programmes sein ;-)
[/EDIT]

3_of_8 31. Jul 2006 23:00

Re: Aktuelles Verzeichnis
 
GetCurrentDir öffnet denke ich mal das Arbeitsverzeichnis.

Martin K 31. Jul 2006 23:06

Re: Aktuelles Verzeichnis
 
Das ist mir schon klar.
Zitat:

Zitat von Martin K
GetCurrenDir liefert mir das Verzeichnis, in dem meine Anwendung gestartet wurde.

Damit meine ich ja das Verzeinis, wo die Anwendung gestartet wurde nicht wo die EXE liegt.
Meinetwegen heißt das Arbeitsverzeichnis.

Vielleicht muss ich die Frage anders formulieren:
Warum verwendet Start ->Ausführen als Arbeitsverzeichnis %HomePath% ?
Ist das immer so?

Michael Habbe 31. Jul 2006 23:36

Re: Aktuelles Verzeichnis
 
Mit GetCurrentDir bekommst Du den Inhalt einer globalen (Windows-)Variable, welches das aktuell eingestellte Verzeichnis enthält. Du kannst dieses mit SetCurrentDir verändern. Alle Programme, die nur mit GetCurrentDir z.B. ihr Datenverzeichnis abfragen kannst Du hiermit zum Abschmieren bringen.

Wenn Du also wichtige Datenpfade ermittelst, nehme niemals GetCurrentDir dazu (Erfahrungswerte, lange Debugsitzungen :kotz: ).

Wenn Du den Pfad Deiner Anwendung ermitteln willst, unabhängig davon, wie oder wo sie gestartet wurde, benutze "ExtractFilePath(ParamStr(0))". Da steht alles drin.

Martin K 1. Aug 2006 13:37

Re: Aktuelles Verzeichnis
 
Zitat:

Zitat von Michael Habbe
Mit GetCurrentDir bekommst Du den Inhalt einer globalen (Windows-)Variable, welches das aktuell eingestellte Verzeichnis enthält. Du kannst dieses mit SetCurrentDir verändern. Alle Programme, die nur mit GetCurrentDir z.B. ihr Datenverzeichnis abfragen kannst Du hiermit zum Abschmieren bringen.

Das denke ich nicht.
IMHO hat jede laufende Anwendung sein eigenes CurrentDir und es gibt kein globales.
Bzw. ich dachte es gäbe ein globales, (z.B. bei Start->Ausführen = %HomePath%) aber anscheinend ist das nicht so.
Auf jeden Fall bekommt man das globale Arbeitsverzeichnis - falls es ein solches geben sollte - nicht mit GetCurrentDir.

Getestet:
Einfach zwei Delphi-Programme starten, in einem wird per ButtonClick GetCurrentDir ausgelesen und in dem anderen mit SetCurrentDir z.B. das Arbeitsverzeichnis auf C:\ festgelegt.
Lege ich das Arbeitsverzeichnis fest, hat sich aber GetCurrentDir im anderen Programm nicht geändert!

Luckie 1. Aug 2006 13:44

Re: Aktuelles Verzeichnis
 
Einfach im PSDK nachgucken:
Zitat:

The GetCurrentDirectory function retrieves the current directory for the current process.

Martin K 1. Aug 2006 13:49

Re: Aktuelles Verzeichnis
 
Eben:
Zitat:

[...] for the current process.
Meine Frage war, ob es ein globales CurrentDir gibt, also systemweit. :gruebel:
(anscheinend nicht...)

//Edit:
Aber trotzdem danke an alle, für eure Bemühungen :thumb:

Der_Unwissende 1. Aug 2006 13:58

Re: Aktuelles Verzeichnis
 
Hi,
ob es ein globales Arbeitsverzeichnis gibt oder nicht kann ich dir nicht sagen, aber wozu bräuchtest du denn eins? Ich meine ich finde die Idee dahinter wiederspricht ja eigentlich ein wenig dem, was ein BS machen soll. Letztlich wissen die einzelnen Prozesse doch gar nicht, dass sie nicht allein sind. Die kennen ihre Kindprozesse und sich selbst, aber die denken immer alles ihrs!
Das Windows (oder ein anderes BS) da vermittelt muss dem Programm ja auch nicht klar sein. Wenn es nun also ein Arbeitsverzeichnis möchte, dann denkt dieses Programm ja schließlich auch, dass es sein Arbeitsverzeichnis wäre.
Der Sinn eines globalen Verzeichnis wäre mir an dieser Stelle nicht wirklich klar. Also ich finde es immer schon nervig genug, wenn ein Programm bei jedem Speichern bei einem festen Pfad anfängt, man also 100 mal speichert und jedes mal den Ordner (z.B. \Dokumente und Einstellungen\<Benutzer>\ verlassen darf und das eigentliche Ziel suchen muss. Wenn ich mir jetzt vorstelle, dass wenn ich, k.A. mit Corel etwas mache mein aktueller OpenOffice Speicherpfad und der von Delphi sich ändern...

Also vielleicht seh nur ich den Sinn nicht, wie gesagt ich weiß nicht ob es vielleicht so etwas gibt oder nicht.

gruß Der Unwissende

marabu 1. Aug 2006 16:37

Re: Aktuelles Verzeichnis
 
Hallo Martin,

hinter dem CurrentDir bzw. Arbeitsverzeichnis verbirgt sich das current working directory (cwd) aus der Unix-Welt - da hat sich Microsoft damals seine Inspiration für XENIX geholt, bevor die Funktionalität in DOS 2.10 Einzug hielt. Globales Arbeitsverzeichnis ist ein Oxymoron.

Was du beobachtet hast, ist das sogenannte home directory - auch bei Unix geklaut. Über eine Regel bestimmt dabei das Betriebssystem ein Standard-Arbeitsverzeichnis der Shell.

Grüße vom marabu

Martin K 1. Aug 2006 19:01

Re: Aktuelles Verzeichnis
 
Zitat:

Zitat von marabu
Was du beobachtet hast, ist das sogenannte home directory - auch bei Unix geklaut. Über eine Regel bestimmt dabei das Betriebssystem ein Standard-Arbeitsverzeichnis der Shell.

Grüße vom marabu

Ja, das hört sich doch gut an.
Und wie kann ich dieses Standard-Arbeitsverzeichnis der Shell erhalten, bzw. ist das immer %HomePath% ?

Michael Habbe 1. Aug 2006 19:56

Re: Aktuelles Verzeichnis
 
Zitat:

Zitat von Martin K
Und wie kann ich dieses Standard-Arbeitsverzeichnis der Shell erhalten, bzw. ist das immer %HomePath% ?

Benutz mal die Funktion "GetEnvironmentVariable" mit Parameter "HOMEPATH". Um die Parameter zu ermitteln, die es min. gibt, öffne mal ein CMD und gib mal "set" ein. Da kannst Du alle Umgebungsvariablen sehen.
Oder rechte Maustaste auf Arbeitsplatz --> Eigenschaften --> Erweitert --> Umgebungsvariablen.

Martin K 1. Aug 2006 22:06

Re: Aktuelles Verzeichnis
 
Danke, aber wie ich HomePath ermitteln kann war mir schon klar.

Nur:
Ist auch immer Standard-Arbeitsverzeichnis der Shell = HomePath ?

xaromz 1. Aug 2006 22:10

Re: Aktuelles Verzeichnis
 
Hallo,
Zitat:

Zitat von Martin K
Ist auch immer Standard-Arbeitsverzeichnis der Shell = HomePath ?

Wenn sich MS das auch von Unix abgeschaut hat, dann: ja. Ich hab' das auch noch nicht anders erlebt.

Gruß
xaromz

Martin K 2. Aug 2006 13:27

Re: Aktuelles Verzeichnis
 
Gut.
Danke für Deine Antwort!


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