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.
