_mktemp_s, _wmktemp_s
Создает уникальное имя файла.Эти версии _mktemp, _wmktemp со службами расширений безопасности, как описано в разделе Средства безопасности в CRT.
errno_t _mktemp_s(
char *template,
size_t sizeInChars
);
errno_t _wmktemp_s(
wchar_t *template,
size_t sizeInChars
);
template <size_t size>
errno_t _mktemp_s(
char (&template)[size]
); // C++ only
template <size_t size>
errno_t _wmktemp_s(
wchar_t (&template)[size]
); // C++ only
Параметры
template
Шаблон имени файла.sizeInChars
Размер буфера (в символах) в единый-байта _mktemp_s; расширенные символы внутри _wmktemp_s, включая нулевой завершающий символ.
Возвращаемое значение
Обе эти функции возвращают нуль в случае успеха; код ошибки при сбое.
Условия возникновения ошибок
template |
sizeInChars |
возвращаемое значение |
новое значение в шаблоне |
---|---|---|---|
NULL |
any |
EINVAL |
NULL |
Неправильный формат (см. Remarks раздел для правильного формата) |
any |
EINVAL |
пустая строка |
any |
номер <= X |
EINVAL |
пустая строка |
Если либо над ошибками, недопустимый параметр вызван обработчик, как описано в разделе Проверка параметров.Если выполнение может продолжить, errno равно EINVAL и функции возвращают EINVAL.
Заметки
_mktemp_s функция создает уникальное имя файла, изменив template аргумент, так как после вызова template указатель указывает на строку, содержащую имя нового файла._mktemp_s автоматически обрабатывает аргументы характерной черты, узнающ последовательности многобайтового символов в соответствии с многобайтовой кодовой странице в настоящий момент используется системой среды выполнения._wmktemp_s версия расширенных символов _mktemp_s; аргумент _wmktemp_s строка символов._wmktemp_s и _mktemp_s поступайте идентично в противном случае, за исключением того, что _wmktemp_s не обрабатывает характерные черты.
Сопоставления подпрограммы Родов-Текста
Подпрограмма Tchar.h |
Не указанные _UNICODE и _MBCS |
Указанный символ _MBCS |
Указанный _UNICODE |
---|---|---|---|
_tmktemp_s |
_mktemp_s |
_mktemp_s |
_wmktemp_s |
template аргумент имеет форму , где base часть нового имени файла, введенного и каждый прототип для предоставленного by символа x _mktemp_s.Каждый символ заполнителя в template должно быть прописными буквами x._mktemp_s сохраняет base и заменяет первый замыкающий x с алфавитного символа._mktemp_s заменяет следующие конечные X с пятизначным значение; это значение уникально число, определяющее вызывающий процесс или в многопотоковых программах, вызывающий поток.
Каждый успешный вызов _mktemp_s изменяет template.В каждом последующем вызове из одних и тех же процесса или потока с одинаковыми template аргумент _mktemp_s проверяет имен файлов, имена соответствовали, возвращенные _mktemp_s в предыдущих вызовов.Если файл не существует для данного имени _mktemp_s возвращает имя.Если файлы находятся для всех ранее, возвращаемых имен _mktemp_s создает новое имя, заменив алфавитный символ он использовал в ранее, возвращенного имени со следующей доступной буквой нижнего регистра, в порядке от "a" до "z".Например, если base выглядит следующим образом:
fn
и пятизначное значение, возвращенное by _mktemp_s 12345, возвращаемое имя:
fna12345
Если это имя используется для создания файла FNA12345 и этот файл все еще существует, то следующее имя, возвращенное при вызове из этих же процесс или поток с одинаковыми base для template выглядит следующим образом:
fnb12345
Если FNA12345 не существует, то возвращаемое имя снова следующее:
fna12345
_mktemp_s можно создать максимум 26 уникальных имен файлов для всех заданных значений сочетание базового и шаблонов.Поэтому FNZ12345 последнее уникальное имя файла _mktemp_s можно создать для base и template значения, использованные в этом примере.
В C++ с помощью этих функций упрощает перегрузками шаблона; перегруженные методы могут определять длина буфера, автоматически (что устраняет необходимость указать аргумент size) и они могут автоматически заменять старые, non-безопасные функции с их новыми, безопасный копиями.Дополнительные сведения см. в разделе Предоставляйте перегруженный шаблона.
Требования
Процедура |
Обязательный заголовок |
---|---|
_mktemp_s |
<io.h> |
_wmktemp_s |
<io.h> OR <wchar.h> |
Дополнительные сведения о совместимости см. Совместимость во введении.
Пример
// crt_mktemp_s.cpp
/* The program uses _mktemp to create
* five unique filenames. It opens each filename
* to ensure that the next name is unique.
*/
#include <io.h>
#include <string.h>
#include <stdio.h>
char *fnTemplate = "fnXXXXXX";
char names[5][9];
int main()
{
int i, err, sizeInChars;
FILE *fp;
for( i = 0; i < 5; i++ )
{
strcpy_s( names[i], sizeof(names[i]), fnTemplate );
/* Get the size of the string and add one for the null terminator.*/
sizeInChars = strnlen(names[i], 9) + 1;
/* Attempt to find a unique filename: */
err = _mktemp_s( names[i], sizeInChars );
if( err != 0 )
printf( "Problem creating the template" );
else
{
if( fopen_s( &fp, names[i], "w" ) == 0 )
printf( "Unique filename is %s\n", names[i] );
else
printf( "Cannot open %s\n", names[i] );
fclose( fp );
}
}
return 0;
}
Пример результатов выполнения
Unique filename is fna03188
Unique filename is fnb03188
Unique filename is fnc03188
Unique filename is fnd03188
Unique filename is fne03188
Эквивалент в .NET Framework
Неприменимо. Для c# используйте стандартная функция PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.