Home » Tipps & Tricks » Dateien/Verzeichnisse » Verzeichnisse » Mit dem Arbeitsverzeichnis arbeiten

Mit dem Arbeitsverzeichnis arbeiten

Das Arbeitsverzeichnis spielt häufig bei Konsolen-Anwendungen eine wichtige Rolle, da es das Verzeichnis ist, in dem gearbeitet wird. Es ist anwendungsspezifisch und gibt das Wurzel-Verzeichnis an, zu dem die in der Anwendung benutzen relativen Dateipfade stehen.

Mit der Konsole (cmd) von Windows kann es innerhalb einer Konsolen-Anwendung über cd (Change Dir) festgelegt werden und bleibt während der gesamten Konsolen-Sitzung erhalten, sofern es nicht nochmal geändert wird. Wird aus der Konsole also ein anderes Programm aufgerufen, übernimmt das aufgerufene Programm das Arbeitsverzeichnis der Konsole. Benutzt die aufgerufene Anwendung nun relative Pfade, beziehen sie sich auf das Arbeitsverzeichnis, welches in der Konsole festgelegt wurde.

Wird eine Anwendung direkt über den Windows-Explorer gestartet, ist das Arbeitsverzeichnis – sofern in den Eigenschaften der ausführbaren Datei nicht anders festgelegt – das Verzeichnis, indem sich die Anwendung befindet.

Es kann aber nicht immer davon ausgegangen werden, dass das Arbeitsverzeichnis das Verzeichnis der Anwendung oder ein anderes bekanntes Verzeichnis ist, da es sich schnell und unbemerkt ändern kann, wie z.B. bei einer GUI-Anwendung durch den TOpenDialog. Aus diesem Grund sollten keine Konfigurationsdateien aus dem Arbeitsverzeichnis geladen werden. Nützlich ist das Arbeitsverzeichnis aber, falls ein Verzeichnis benötigt wird, in dem gearbeitet wird, d.h. wenn viele Dateioperationen durchgeführt werden. Als einfaches Beispiel der Delphi-Compiler: Über das Arbeitsverzeichnis wird festgelegt, in welchem Ordner sich die zu kompilierenden und zu erstellenden Dateien befinden.

Innerhalb einer Anwendung kann das Arbeitsverzeichnis also ausgelesen und auch neu gesetzt werden. Die beiden Befehle dazu befinden sich in der Unit ShellAPI, darum muss diese in die Uses-Klausel aufgenommen werden.

Arbeitsverzeichnis auslesen

Das Arbeitsverzeichnis kann mit folgender Funktion ausgelesen werden:

function GetCurrentDir: string;
begin
  GetDir(0, Result);
end;

Arbeitsverzeichnis festlegen

Das Arbeitsverzeichnis kann mit folgender Funktion festgelegt werden:

function SetCurrentDir(const ADir: string): Boolean;
begin
  Result := SetCurrentDirectory(PChar(ADir));
end;

Der Rückgabewert gibt an, ob das Verzeichnis erfolgreich gesetzt wurde.
Hinweis: Ab Delphi 7 gibt es in der Unit SysUtils bereits gleichnamige Funktionen!