Partilhar via


_mktemp, _wmktemp

Cria um nome de arquivo exclusivo. Versões mais seguras dessas funções estão disponíveis; 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 retorna NULL se template é formado ruim ou não mais nome exclusivo pode ser criado no determinado modelo.

Comentários

A função de _mktemp cria um nome de arquivo exclusivo alterando o argumento de template . _mktemp controla automaticamente argumentos de cadeia de caracteres de multibyte- caracteres conforme apropriado, confirmando sequências de multibyte- caractere de acordo com a página de código de multibyte atualmente em uso pelo sistema de tempo de execução. _wmktemp é uma versão de ampla caractere de _mktemp; o argumento e o valor de retorno de _wmktemp são cadeias de caracteres de ampla caractere. _wmktemp e _mktemp se comportam idêntica de outra forma, exceto que _wmktemp não trata as cadeias de caracteres de multibyte- caractere.

Mapeamentos da rotina de texto genérico

Rotina Tchar.h

_UNICODE e _MBCS não definidos

_MBCS definido

_UNICODE definido

_tmktemp

_mktemp

_mktemp

_wmktemp

O argumento de template tem o formato baseXXXXXX, onde base é a parte do novo nome do arquivo que você fornece e cada X é um espaço reservado para um caractere fornecido por _mktemp. Cada caractere de espaço reservado em template deve ser maiúsculo X. _mktemp preserva base e substitui o primeiro X da direita com um caractere alfabético. _mktemp substitui os seguintes x para a direita com um valor de cinco dígitos; esse valor é um número exclusivo que identifica o processo de chamada, ou em programas multi-threaded, o thread de chamada.

Cada chamada bem-sucedida a _mktemp altera template. Em cada chamada subsequente do mesmo processo ou threads com o mesmo argumento de template , verificações de _mktemp para nomes de arquivo que correspondem aos nomes retornados por _mktemp em chamadas anteriores. Se nenhum arquivo existir para um nome específico, _mktemp retorna esse nome. Se os arquivos existe para todos os nomes anteriormente retornados, _mktemp cria um novo nome substituindo o caractere alfabético que usa o nome anteriormente retornado com a letra minúscula disponível seguinte, em ordem, “a” por “z”. Por exemplo, se base é:

fn

e o valor de cinco dígitos fornecido por _mktemp é 12345, o nome retornado é:

fna12345

Se esse nome é usado para criar o arquivo FNA12345 e esse arquivo ainda existir, o nome do próximo retornado em uma chamada do mesmo processo ou thread com o mesmo base para template é:

fnb12345

Se FNA12345 não existir, o nome seguir é retornado novamente:

fna12345

_mktemp pode criar um máximo de 26 nomes de arquivo exclusivos para qualquer determinada combinação de valores base e do modelo. Consequentemente, FNZ12345 é o nome de arquivo exclusivo o último _mktemp pode criar para os valores de base e de template usados neste exemplo.

Em caso de falha, errno é definido. Se template tem um formato inválido (por exemplo, menos de 6 x), errno está definido como EINVAL. Se _mktemp é não é possível criar um nome exclusivo porque todos os nomes de arquivos 26 possíveis já existirem, _mktemp define o modelo para uma cadeia de caracteres vazia e retorna EEXIST.

No C++, essas funções têm as sobrecargas de modelo que invocam as correspondentes seguras mais recentes dessas funções. Para obter mais informações, consulte Sobrecargas de modelo seguras.

Requisitos

Rotina

Cabeçalho necessário

_mktemp

<io.h>

_wmktemp

<io.h ou> wchar.h <>

Para obter mais informações sobre 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 padrão de C, use PInvoke. Para obter mais informações, consulte Exemplos de chamadas de plataformas.

Consulte também

Referência

Manipulação de arquivos

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile