Создание временных файлов
Для создания временных файлов используется функция GetTempPath, определяющая каталог, в котором создается временный файл
DWORD GetTempPath(
DWORD nBufferLength, // размер (в символах) буфера для имени //каталога
LPTSTR lpBuffer // адрес буфера для каталога
);
Возвращаемое значение
При успешном завершении – количество символов в буфере, куда записан каталог с нулевым завершителем. Если возвращаемое значение больше, чем задано, фактически возвращается требуемое значение.
Ошибка – 0.
Замечание.
Каталог для временных файлов формируется так:
1. Каталог определяется переменной среды TMP.
2. Каталог определяется переменной среды TEMP, если TMP не задана.
3. Текущий каталог, если TMP и TEMP не заданы.
Для формирования имени временного файла используется функция GetTempFileName.
Имя файла является объединением каталога для временного файла и строки – префикса, формируемой из заданного целого в 16-ой системе счисления. Расширение файла всегда TMP.
Заметим, что функция создает имя файла, но не сам файл. Если задан 0 в качестве целого, функция создает уникальное имя файла.
UINT GetTempFileName(
LPCTSTR lpPathName, // Имя каталога для временного файла
LPCTSTR lpPrefixString, // Строка с префиксом
UINT uUnique, // Число, которое используется для создания имени //файла
LPTSTR lpTempFileName // Адрес буфера для имени файла
);
lpPathName – указатель на строку с нулевым завершителем. Строка должна содержать символы в кодировке ANSI. Обычно задается (.), т.е. текущий каталог или результат работы функции GetTempPath. Если этот параметр равен NULL, функция завершается с ошибкой.
lpPrefixString- Указатель на строку с нулевым завершителем. Функция использует первые 3 символа этой строки как префикс имени файла. Символы необходимо задавать в кодировке ANSI.
uUnique – беззнаковое целое, которое функция преобразует в 16-ую строку и использует при создании имени файла. Если uUnique != 0, функция добавляет эту строку к префиксу для формирования имени. В этом случае функция не создает заданный файл и не проверяет его имя на уникальность. Если uUnique = 0, функция формирует 16-ую строку по текущему системному времени. В этом случае формируются новые значения (++) до тех пор, пока не получим уникальное имя файла, и затем она создает файл в заданном каталоге, а потом его закрывает.
lpTempFileName – сюда заносится сформированное имя файла в кодировке ANSI.
Буфер должен быть достаточной длины (MAX_PATH).
Возвращаемое значение
Успех – функция возвращает уникальное число, которое использовалось при формировании имени файла. Если uUnique не равен 0, то возвращается это значение.
При ошибке функция возвращает 0 ( GetLastError)
Таким образом формат имени:
path\preuuuu.TMP
где
path путь;
pre первые 3 символа префикса
uuuu 16-ое значение uUnique
Когда Windows перезагружается, временные файлы, созданные этой функцией, автоматически не удаляются. Для преобразования имени файла из формата ANSI в Windows строку, необходимо использовать функцию CreateFile для создания временного файла.