//Модуль с реализацией функций работы с каталогами и системными путями
unit PathFunctions;

interface
uses Windows, SysUtils, ShlObj;


function GetWinDir(): String;
function GetSysDir(): String;
function GetTempDir(): String;
function GetTempFile(prefix: String = '~mytmp'): String;
function GetSpecialDir(dirtype: Integer): String;
function GetCurrentDir(): String;

implementation

//Получение папки Windows
function GetWinDir(): String;
var
  buffer: String;
  len: UINT;
begin
  SetLength(buffer, MAX_PATH + 1);
  len := GetWindowsDirectory(PAnsiChar(buffer), MAX_PATH);
  SetLength(buffer, len);
  GetWinDir := buffer;
end;

//Получение системной папки
function GetSysDir(): String;
var
  buffer: String;
  len: UINT;
begin
  SetLength(buffer, MAX_PATH + 1);
  len := GetSystemDirectory(PAnsiChar(buffer), MAX_PATH);
  SetLength(buffer, len);
  GetSysDir := buffer;
end;

//Получение папки для временных файлов
function GetTempDir(): String;
var
  buffer: String;
  len: UINT;
begin
  SetLength(buffer, MAX_PATH + 1);
  len := GetTempPath(MAX_PATH, PAnsiChar(buffer));
  SetLength(buffer, len);
  GetTempDir := buffer;
end;

//Получение имени для временного файла (в папке для
//временных файлов)
function GetTempFile(prefix: String = '~mytmp'): String;
var
  buffer, dir: String;
begin
  dir := GetTempDir();
  //Получение имени временного файла (система сама определяет имя,
  //уникальное для заданной папки)
  SetLength(buffer, MAX_PATH + 1);
  GetTempFileName(PAnsiChar(dir), PAnsiChar(prefix), 0, PAnsiChar(buffer));
  GetTempFile := buffer;
end;

function GetSpecialDir(dirtype: Integer): String;
var
  buffer: String;
begin
  SetLength(buffer, MAX_PATH + 1);
  SHGetSpecialFolderPath(0, PAnsiChar(buffer), dirtype, FALSE);
  GetSpecialDir := buffer;
end;

//Функция возвращает строку с путем текущей папки
function GetCurrentDir(): String;
var
  len: Integer;
  buffer: String;
begin
  SetLength(buffer, MAX_PATH + 1);
  len := GetCurrentDirectory(MAX_PATH, PAnsiChar(buffer));
  GetCurrentDir := Copy(buffer, 1, len);
end;

end.
