_mktemp, _wmktemp
Cria um nome de arquivo exclusivo.Versões mais seguras dessas funções estão disponível; consulte _mktemp_s, _wmktemp_s.
char *_mktemp(
char *template
);
wchar_t *_wmktemp(
wchar_t *template
);
template <size_t size>
char *_mktemp(
char (&template)[size]
); // C++ only
template <size_t size>
wchar_t *_wmktemp(
wchar_t (&template)[size]
); // C++ only
Parâmetros
- template
Padrão de nome de arquivo.
Valor de retorno
Cada uma dessas funções retorna um ponteiro para o modelo modificado.A função retornará NULL Se template formato incorreto ou não há mais nomes exclusivos podem ser criados do modelo fornecido.
Comentários
The _mktemp função cria um nome de arquivo exclusivo, modificando o template argumento. _mktemp trata automaticamente sistema autônomo argumentos de seqüência de caractere multibyte conforme apropriado, reconhecendo seqüências de caractere de multibyte de acordo com para a página de código multibyte atualmente em uso pelo sistema de time de execução. _wmktemp é uma versão de caractere largo da _mktemp; valor de argumento e retornar _wmktemp são seqüências de caracteres largos. _wmktemp e _mktemp tenham comportamento idêntico caso contrário, exceto que _wmktemp não trata as seqüências de caractere de multibyte.
Mapeamentos de rotina de texto genérica
Rotina tchar.h |
_UNICODE e _MBCS não definido |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tmktemp |
_mktemp |
_mktemp |
_wmktemp |
The template argumento tem o seguinte formato: baseXXXXXX, onde base é a parte do novo nome de arquivo que você fornecer e cada X é um espaço reservado para um caractere fornecido pelo _mktemp. Cada caractere de espaço reservado template deve ser um X em maiúsculas. _mktemp preserva base e substitui o primeiro X à esquerda com um caractere alfabético. _mktemp substitui o seguinte à direita x com um valor de cinco dígitos; esse valor é um número exclusivo identificando chamada processo, ou em programas multithread, o thread de chamada.
Cada telefonar bem-sucedida para _mktemp modifica template. Em cada telefonar subseqüente do mesmo processo ou segmento com o mesmo template argumento, _mktemp verifica os nomes de arquivo que correspondem aos nomes retornados pela _mktemp em chamadas anteriores. Se não existir para um determinado nome, _mktemp Retorna esse nome. Se existirem arquivos para todos os nomes retornados anteriormente, _mktemp cria um novo nome, substituindo o caractere alfabético que ele usado o nome retornado anteriormente com a próxima letra de em minúsculas disponível, em ordem, de 'a 'a' z'. Por exemplo, se base é:
fn
e o valor de cinco dígitos fornecido pelo _mktemp é 12345, é o nome retornado:
fna12345
Se esse nome é usado para criar o arquivo FNA12345 e esse arquivo ainda existe, o próximo nome retornado em uma telefonar do mesmo processo ou segmento com o mesmo base para template é:
fnb12345
Se FNA12345 não existir, o próximo nome retornado é novamente:
fna12345
_mktemp pode criar no máximo 26 nomes de arquivo exclusivo para qualquer determinada combinação dos valores de base e o modelo. Portanto, FNZ12345 é o último nome exclusiva do arquivo _mktemp pode criar para o base e template valores usados neste exemplo.
Em caso de falha, errno é conjunto. If template tem um formato inválido (por exemplo, menos de 6 X), errno é conjunto para EINVAL. If _mktemp não pode criar um nome exclusivo, porque todos os nomes de arquivo possíveis 26 já existem, _mktemp Define o modelo como uma seqüência de caracteres vazia e retorna EEXIST.
No C++, essas funções têm sobrecargas de modelo que invocam as suas similares do mais recentes, seguras dessas funções.For more information, see Proteger overloads de modelo.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
_mktemp |
<io.h> |
_wmktemp |
<io.h> ou <wchar.h> |
Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.
Exemplo
// crt_mktemp.c
// compile with: /W3
/* The program uses _mktemp to create
* unique filenames. It opens each filename
* to ensure that the next name is unique.
*/
#include <io.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
char *template = "fnXXXXXX";
char *result;
char names[27][9];
int main( void )
{
int i;
FILE *fp;
for( i = 0; i < 27; i++ )
{
strcpy_s( names[i], sizeof( names[i] ), template );
/* Attempt to find a unique filename: */
result = _mktemp( names[i] ); // C4996
// Note: _mktemp is deprecated; consider using _mktemp_s instead
if( result == NULL )
{
printf( "Problem creating the template\n" );
if (errno == EINVAL)
{
printf( "Bad parameter\n");
}
else if (errno == EEXIST)
{
printf( "Out of unique filenames\n");
}
}
else
{
fopen_s( &fp, result, "w" );
if( fp != NULL )
printf( "Unique filename is %s\n", result );
else
printf( "Cannot open %s\n", result );
fclose( fp );
}
}
}
Unique filename is fna03912 Unique filename is fnb03912 Unique filename is fnc03912 Unique filename is fnd03912 Unique filename is fne03912 Unique filename is fnf03912 Unique filename is fng03912 Unique filename is fnh03912 Unique filename is fni03912 Unique filename is fnj03912 Unique filename is fnk03912 Unique filename is fnl03912 Unique filename is fnm03912 Unique filename is fnn03912 Unique filename is fno03912 Unique filename is fnp03912 Unique filename is fnq03912 Unique filename is fnr03912 Unique filename is fns03912 Unique filename is fnt03912 Unique filename is fnu03912 Unique filename is fnv03912 Unique filename is fnw03912 Unique filename is fnx03912 Unique filename is fny03912 Unique filename is fnz03912 Problem creating the template. Out of unique filenames.
Equivalente do NET Framework
Não aplicável. Para telefonar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.