Compartilhar via


_mktemp_s, _wmktemp_s

Cria um nome de arquivo exclusivo.Essas são sistema autônomo versões de _mktemp, _wmktemp com aprimoramentos de segurança conforme descrito em Aprimoramentos de segurança no 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

Parâmetros

  • template
    Padrão de nome de arquivo.

  • sizeInChars
    dimensionar do buffer em caracteres de byte único em _mktemp_s; largo caracteres _wmktemp_s, incluindo o terminador nulo.

Valor de retorno

Ambas as funções retornam zero em caso de sucesso; um código de erro em caso de falha.

Condições de erro

template

sizeInChars

valor retornado

novo valor no modelo

NULL

any

EINVAL

NULL

Formato incorreto (consulte Remarks seção para o formato correto)

any

EINVAL

seqüência de caracteres vazia

any

<= número de x

EINVAL

seqüência de caracteres vazia

Se ocorrer qualquer uma das condições de erro acima, o manipulador de parâmetro inválido é chamado, conforme descrito em Validação de parâmetro. Se a execução for permitida para continuar, errno é conjunto para EINVAL e o retorna funções EINVAL.

Comentários

The _mktemp_s função cria um nome de arquivo exclusivo, modificando o template argumento, para que após a telefonar a template ponteiro aponta para uma seqüência de caracteres contendo o novo nome de arquivo. _mktemp_s 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_s é uma versão de caractere largo da _mktemp_s; o argumento do _wmktemp_s é uma seqüência de caracteres largos. _wmktemp_s e _mktemp_s tenham comportamento idêntico caso contrário, exceto que _wmktemp_s 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_s

_mktemp_s

_mktemp_s

_wmktemp_s

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_s. Cada caractere de espaço reservado template deve ser um X em maiúsculas. _mktemp_s preserva base e substitui o primeiro X à esquerda com um caractere alfabético. _mktemp_s 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_s modifica template. Em cada telefonar subseqüente do mesmo processo ou segmento com o mesmo template argumento, _mktemp_s verifica os nomes de arquivo que correspondem aos nomes retornados pela _mktemp_s em chamadas anteriores. Se não existir para um determinado nome, _mktemp_s Retorna esse nome. Se existirem arquivos para todos os nomes retornados anteriormente, _mktemp_s 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_s é 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_s 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_s pode criar para o base e template valores usados neste exemplo.

No C++, usando essas funções é simplificado pelo modelo sobrecargas; sobrecargas de podem inferir o comprimento do buffer automaticamente (eliminando a necessidade de especificar um argumento de dimensionar) e eles podem substituir automaticamente funções não seguras, mais antigas, com suas contrapartes mais recentes e seguras.For more information, see Proteger overloads de modelo.

Requisitos

Rotina

Cabeçalho necessário

_mktemp_s

<io.h>

_wmktemp_s

<io.h> ou <wchar.h>

Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.

Exemplo

// crt_mktemp_s.c
/* 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 *template = "fnXXXXXX";
char names[5][9];

int main( void )
{
   int i, err, sizeInChars;
   FILE *fp;

   for( i = 0; i < 5; i++ )
   {
      strcpy_s( names[i], sizeof(names[i]), template );
      /* 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 );
      }
   }
}

Saída de exemplo

Unique filename is fna03836
Unique filename is fnb03836
Unique filename is fnc03836
Unique filename is fnd03836
Unique filename is fne03836

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.

Consulte também

Referência

Manipulação de arquivos

fopen, _wfopen

_getmbcp

_getpid

_Open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile_s