Імена для тимчасових файлів

Для централізованого зберігання тимчасових даних, необхідних при роботі додатків, у Windows передбачена спеціальна папкаTemp. Її розташування може змінюватись. Причому в розрахованих на багато користувачів версіях Windows (NT, 2000, ХР) місце розташування папки для тимчасових файлів може бути різним для різних користувачів. Отже, розташування папкиTemp допоможе визначити API-функцію GetTempPath. Вона приймає такі параметри: рядковий буфер та довжину цього буфера. Повертає кількість символів, записаних у переданий рядок, або 0, якщо виникла помилка. Функція-оболонка, що приховує роботу з рядковим буфером та перетворення типів, реалізується аналогічно двом раніше розглянутим функціям (листинг 4.12).

function GetTempDir(): String;

SetLength(buffer, MAX_PATH + 1);

len := GetTempPath(MAX_PATH, PANsiChar(buffer));

Крім того, Windows API передбачає дуже корисну функцію, що позбавляє програміста необхідності підбирати імена тимчасових файлів так, щоб вони були унікальними в межах заданої папки (це не обов'язково повинна бути папкаTemp ). Ім'я цієї функції – GetTempFileName. Приклад її використання наведено у лістингу 4.13.

function GetTempFile(prefix: String = '

buffer, dir: String;

//Отримання імені тимчасового файлу (система сама визначає

//Унікальне для заданої папки)

SetLength(buffer, MAX_PATH + 1);

GetTempFileName(PANsiChar(dir), PANsiChar(prefix), 0,

Наведена в листингу 4.13 функція як папка для тимчасових файлів використовує папкуTemp. Однак функцію GetTempFileName можна використовувати для отримання імен файлів у межах будь-якої папки.

Окрім шляху папки, в якій необхідно створити тимчасовий файл, функціяGetTempFileName приймає рядок-префікс для імені тимчасового файлу та ціле значення (третій параметр). Якщо третій параметр не дорівнює нулю, його значення в шістнадцятковій формі просто додається праворуч до рядка prefix. Ніяких перевірок на унікальність імені файлу, що вийшов, при цьому не проводиться. Якщо ж третій параметр встановити в 0, система сама сформує шістнадцяткове значення так, щоб ім'я файлу було унікальним в заданій папці. Крім того, створюється і сам файл.

Буфер (останній параметр функції GetTempFileName) повинен вміщувати як мінімум МАХРАТН символів, оскільки функція записує повний шлях тимчасового файлу.

Приклад роботи функцій визначення папки для тимчасових файлів, отримання імені тимчасового файлу, і навіть визначення системних папок Windows наводиться на рис. 4.2.

Мал. 4.2. Папки WINDOWS, system, Temp та ім'я для тимчасового файлу