Программирование на Ассемблере

       

Создание временных файлов


Для создания временных файлов используется функция 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 для создания временного файла.



Содержание раздела