суббота, 31 мая 2008 г.

Получение папки временных файлов в Windows

Существуют, как минимум, два способа получения папки временных файлов в Windows (т.е. папки, в которой по соглашению приложения свободно могут создавать свои файлы):
  1. Чтение значения переменной окружения TEMP
  2. API-функция GetTempPath
Переменная окружения TEMP.
Времена переменной окружения TEMP уходят в до-Windows'овские дни DOS? но он также доступен для использования и в приложениях Windows. По соглашению, обе переменные TMP и TEMP указывают папку временных файлов.Значения этих переменных могут быть легко считаны с помощью функций GetEnvironmentVariable:
sTmpDir:= GetEnvironmentVariable('TEMP');
Замечание: Для использования функции GetEnvironmentVariable Вы должны включить модуль SysUtils. Версия функции в SysUtils является обёрткой API-функции, объявленной модуле Windows, которая принимает большее количество параметров.
Заголовки функций:

SysUtils:
function GetEnvironmentVariable(const Name: string): string; overload;
Windows:
function GetEnvironmentVariable(lpName: PChar; lpBuffer: PChar; nSize: DWORD): DWORD; stdcall; overload;


API-функция GetTempPath.
API-функция Windows GetTempPath возвращает путь к папке с временными файлами. Она объявлена модуле Windows и выглядит следующим образом:
function GetTempPath(nBufferLength: DWORD; lpBuffer: PChar): DWORD; stdcall;

Т.е. она принимает на вход буфер и размер буфера, и записывает папку с временными файлами вв буфер, возращая количество записанных в буфер данных.

Это не совсем удобно, так как лучше сразу получать в необходимую переменную. По этой причине рассмотрим функцию-обёртку:

function GetTempDirectory(): String;
var
tempFolder: array[0..MAX_PATH] of Char;
begin
GetTempPath(MAX_PATH, @tempFolder);
Result:= StrPas(tempFolder);
end;

Это позволит Вам писать более интуитивно понятный код, тако как:
t := GetTempDirectory();

Примечание:
  • GetTempPath и MAX_PATH описаны в модуле Windows.
  • StrPas описан в модуле SysUtils.
Эта информация верна для Delphi 6 и Delphi 7, а также может быть полезна и в других версиях.

Автор: Ильдар Валеев