_mktemp, _wmktemp
Cria um nome de arquivo exclusivo.Versões mais seguras dessas funções estão disponíveis; see _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 está mal formado ou não há mais nomes exclusivos que podem ser criados do modelo fornecido.
Comentários
O _mktemp função cria um nome de arquivo exclusivo, modificando o template argumento._mktempmanipula automaticamente os argumentos de seqüência de caracteres multibyte conforme apropriado, reconhecendo as seqüências de caracteres multibyte de acordo com para a página de código multibyte atualmente em uso pelo sistema de tempo de execução._wmktempé uma versão de caractere largo de _mktemp; o valor de argumento e o retorno de _wmktemp são seqüências de caracteres largos._wmktempe _mktemp tenham comportamento idêntico caso contrário, exceto que _wmktemp não processa as seqüências de caracteres de multibyte.
Mapeamentos de rotina de texto genérico
Rotina de TCHAR.h |
_ Unicode e _ MBCS do arquivo não definido |
_ MBCS do arquivo definido |
_ Unicode definido |
---|---|---|---|
_tmktemp |
_mktemp |
_mktemp |
_wmktemp |
O template argumento tem a forma baseXXXXXX, onde base é a parte do nome do arquivo que você fornecer e cada x é um espaço reservado para um caractere fornecido pelo _mktemp.Cada caractere de espaço reservado em template deve ser um x em maiúsculas._mktemppreserva base e substitui o primeiro x à direita com um caractere alfabético._mktempsubstitui o seguinte à direita x com um valor de cinco dígitos; Esse valor é um número exclusivo identificando a chamada de processo, ou em programas multithread, o segmento de chamada.
Cada chamada bem sucedida a _mktemp modifica template.Em cada chamada subseqüente do mesmo processo ou thread com o mesmo template argumento, _mktemp verifica os nomes de arquivos que correspondem aos nomes retornados por _mktemp em chamadas anteriores.Se o arquivo não existe para um determinado nome, _mktemp retorna esse nome.Se existirem arquivos para todos retornou anteriormente nomes, _mktemp cria um novo nome, substituindo o caractere alfabético ele usado no nome do retornadas anteriormente com a próxima letra de 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 primeiro nome retornado é:
fna12345
Se esse nome é usado para criar o arquivo FNA12345 e esse arquivo ainda existe, o próximo nome retornado em uma chamada do mesmo processo ou segmento com o mesmo base para template é:
fnb12345
Se FNA12345 não existir, o próximo nome retornado é novamente:
fna12345
_mktemppode criar um máximo de 26 nomes de arquivo exclusivo para qualquer determinada combinação de valores de base e o modelo.Portanto, o FNZ12345 é o último nome de arquivo exclusivo _mktemp pode criar para o base e template valores usados neste exemplo.
Em caso de falha, errno está definida.Se template tem um formato inválido (por exemplo, a menos de 6 X), errno for definido como EINVAL.Se _mktemp não pode criar um nome exclusivo, porque já existem todos os nomes de arquivo possíveis 26, _mktemp define o modelo para uma seqüência 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.Para obter mais informações, consulte 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 );
}
}
}
Equivalência do .NET Framework
Não aplicável. Para chamar a função c padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.