Home » Tipps & Tricks » Dateien/Verzeichnisse » Verzeichnisse » Temporäres Verzeichnis ermitteln

Temporäres Verzeichnis ermitteln

In diesem Artikel wird gezeigt, wie man auf verschiedene Weisen das Verzeichnis für temporäre Dateien ermitteln kann. Das Verzeichnis hat den Zweck Dateien aufzunehmen, die nur kurzfristig von einem Programm benötigt werden. Um die Löschung der dort abgelegten Dateien muss sich der Programmierer allerdings selbst kümmern.

Als bevorzugte Lösung sollte die entsprechende API-Funktion verwendet werden:

function GetTempDir: string;
var
  Dir: string;
  Len: DWord;
begin
  SetLength(Dir,MAX_PATH);
  Len:=GetTempPath(MAX_PATH, PChar(Dir));
  if Len>0 then
  begin
    SetLength(Dir,Len);
    Result:=Dir;
  end
  else
    RaiseLastOSError;
end;

RaiseLastOSError ist erst ab Delphi 6 verfügbar. Programmierer, die mit älteren Versionen arbeiten müssen an dieser Stelle RaiseLastWin32Error verwenden.

Des Weiteren gibt es die Möglichkeit das Temp-Verzeichnis über eine Umgebungsvariable auszulesen:

function GetTempDir: string;
begin
  result := SysUtils.GetEnvironmentVariable('temp');
end;

Die entsprechende Umgebungsvariable heißt ‚temp‘. Eine Liste weiterer Umgebungsvariablen finden Sie in der PSDK unter dem Eintrag „environments, Environment property“.

Da die o.g. Funktion erst ab Delphi 6 in der Unit SysUtils gekapselt ist, müssen Besitzer älterer Versionen direkt auf die API zurückgreifen:

function GetTempDir: string;
var
  lSize: Integer;
  buffer: string;
begin
  lSize:=Windows.GetEnvironmentVariable('temp','',0);
  if lSize>0 then
  begin
    SetLength(buffer,lSize);
    Windows.GetEnvironmentVariable('temp',PChar(buffer),lSize) ;
    Result:=Buffer;
  end
  else
    RaiseLastWin32Error;
end;

Das Verzeichnis wird bei allen drei genannten Möglichkeiten im 8.3-Format zurückgegeben.
In verschiedenen FAQs findet man immer wieder Lösungen, wo dem Programmierer gezeigt wird, wie man das Temp-Verzeichnis über die Registry ermitteln kann. Von dieser Vorgehensweise wird generell abgeraten, da sich die Positionen in der Registry mit jeder Windows-Version ändern können.