_tempnam
, , _wtempnam
tmpnam
_wtmpnam
Формирует имена, которые можно использовать для создания временных файлов. Доступны более безопасные версии некоторых из этих функций; see tmpnam_s
, _wtmpnam_s
.
Синтаксис
char *_tempnam(
const char *dir,
const char *prefix
);
wchar_t *_wtempnam(
const wchar_t *dir,
const wchar_t *prefix
);
char *tmpnam(
char *str
);
wchar_t *_wtmpnam(
wchar_t *str
);
Параметры
prefix
Строка, которая предопределена именам _tempnam
, возвращаемыми .
dir
Путь, используемый в имени файла, если нет переменной среды TMP или если TMP не является допустимым каталогом.
str
Указатель, содержащий созданное имя, идентичное имени, возвращаемого функцией. Это удобный способ сохранения созданного имени.
Возвращаемое значение
Каждая из этих функций возвращает указатель на имя, созданное или NULL
если произошел сбой. Сбой может произойти при попытке больше TMP_MAX
(см. STDIO). H) вызывает вызовы или tmpnam
если используется _tempnam
, а в переменной TMP
среды и в dir
параметре указан недопустимый имя каталога.
Примечание.
Указатели, возвращенные функциями tmpnam
и _wtmpnam
, указывают на внутренние статические буфера. free
не следует вызывать для освобождения этих указателей. Функцию free
необходимо вызывать для указателей, размещенных в памяти функциями _tempnam
и _wtempnam
.
Замечания
Каждая из этих функций возвращает имя файла, который в настоящее время не существует. tmpnam
возвращает имя, уникальное в указанном временном каталоге Windows, возвращенном GetTempPathW
. _tempnam
создает уникальное имя в каталоге, отличном от указанного. Если имя файла добавляется с обратной косой чертой и нет сведений о пути, например \fname21
, указывает, что имя допустимо для текущего рабочего каталога.
В случае функции tmpnam
это сформированное имя файла можно сохранить в параметре str
. Если параметр str
имеет значение NULL
, функция tmpnam
оставляет результат во внутреннем статическом буфере. Поэтому все последующие вызовы уничтожают это значение. Имя, сформированное функцией tmpnam
, состоит из программно формируемого имени файла и, после первого вызова функции tmpnam
, расширения файла из последовательных чисел с основанием 32 (.1–.vvu, если параметр TMP_MAX
в файле STDIO.H имеет значение 32 767).
_tempnam
создает уникальное имя файла для каталога, выбранного следующими правилами:
Если переменная среды TMP определена и задана в допустимое имя каталога, для каталога, указанного TMP, создаются уникальные имена файлов.
Если переменная среды TMP не определена или если задано имя каталога, который не существует,
_tempnam
используетdir
параметр в качестве пути, для которого он создает уникальные имена.Если переменная среды TMP не определена или задано имя каталога, который не существует, и если
dir
NULL
имя каталога, который не существует,_tempnam
использует текущий рабочий каталог для создания уникальных имен. В настоящее время, если TMP иdir
укажите имена каталогов, которые не существуют, вызов функции _tempnam завершается сбоем.
Имя, возвращаемое _tempnam
путем объединения prefix
, и последовательного числа, которые объединяются для создания уникального имени файла для указанного каталога. Функция _tempnam
формирует имена файлов, не имеющие расширение. _tempnam
используется malloc
для выделения пространства для имени файла; программа отвечает за освобождение этого пространства, если оно больше не требуется.
Функции _tempnam
и tmpnam
автоматически корректно обрабатывают многобайтовые строковые аргументы, распознавая последовательности многобайтовых символов согласно кодовой странице OEM, полученной из операционной системы. _wtempnam
— это версия функции _tempnam
для расширенных символов; аргументы и возвращаемое значение функции _wtempnam
являются строками с расширенными символами. _wtempnam
и _tempnam
ведет себя одинаково, за исключением того, что _wtempnam
не обрабатывает строки многобайтовых символов. _wtmpnam
— это версия с расширенными символами для tmpnam
; аргумент и возвращаемое значение _wtmpnam
являются строками с расширенными символами. _wtmpnam
и tmpnam
ведет себя одинаково, за исключением того, что _wtmpnam
не обрабатывает строки многобайтовых символов.
Если _DEBUG
и _CRTDBG_MAP_ALLOC
определены, _tempnam
_wtempnam
и заменяются вызовами _tempnam_dbg
и _wtempnam_dbg
.
Сопоставления подпрограмм универсального текста
Подпрограмма TCHAR.H | _UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_ttmpnam |
tmpnam |
tmpnam |
_wtmpnam |
_ttempnam |
_tempnam |
_tempnam |
_wtempnam |
Требования
Маршрут | Обязательный заголовок |
---|---|
_tempnam |
<stdio.h> |
_wtempnam , _wtmpnam |
<stdio.h> или <wchar.h> |
tmpnam |
<stdio.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// temporary directory, and _tempname to create a unique filename
// in C:\\tmp.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char * name1 = NULL;
char * name2 = NULL;
char * name3 = NULL;
// Create a temporary filename for the current working directory:
if ((name1 = tmpnam(NULL)) != NULL) { // C4996
// Note: tmpnam is deprecated; consider using tmpnam_s instead
printf("%s is safe to use as a temporary file.\n", name1);
} else {
printf("Cannot create a unique filename\n");
}
// Create a temporary filename in temporary directory with the
// prefix "stq". The actual destination directory may vary
// depending on the state of the TMP environment variable and
// the global variable P_tmpdir.
if ((name2 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name2);
} else {
printf("Cannot create a unique filename\n");
}
// When name2 is no longer needed:
if (name2) {
free(name2);
}
// Unset TMP environment variable, then create a temporary filename in C:\tmp.
if (_putenv("TMP=") != 0) {
printf("Could not remove TMP environment variable.\n");
}
// With TMP unset, we'll use C:\tmp as the temporary directory.
// Create a temporary filename in C:\tmp with prefix "stq".
if ((name3 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name3);
}
else {
printf("Cannot create a unique filename\n");
}
// When name3 is no longer needed:
if (name3) {
free(name3);
}
return 0;
}
C:\Users\LocalUser\AppData\Local\Temp\sriw.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\stq2 is safe to use as a temporary file.
c:\tmp\stq3 is safe to use as a temporary file.
См. также
Потоковый ввод-вывод
_getmbcp
malloc
_setmbcp
tmpfile
tmpfile_s