Compartilhar via


_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.

Consulte também

Referência

Manipulação de arquivos

fopen, _wfopen

_getmbcp

_getpid

Open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile