Compartilhar via


_mktemp_s, _wmktemp_s

Cria um nome de arquivo exclusivo.Estas são as versões do _mktemp, _wmktemp com aprimoramentos de segurança, conforme descrito em Recursos 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
    Tamanho do buffer em caracteres de byte único na _mktemp_s; caracteres largos em _wmktemp_s, incluindo o terminador null.

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 de retorno

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 xs

EINVAL

seqüência de caracteres vazia

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

Comentários

O _mktemp_s função cria um nome de arquivo exclusivo, modificando o template argumento, para que depois da chamada, o template ponteiro aponta para uma seqüência de caracteres que contém o novo nome de arquivo._mktemp_smanipula 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_sé uma versão de caractere largo de _mktemp_s; o argumento do _wmktemp_s é uma seqüência de caracteres largos._wmktemp_se _mktemp_s tenham comportamento idêntico caso contrário, exceto que _wmktemp_s 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_s

_mktemp_s

_mktemp_s

_wmktemp_s

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_s.Cada caractere de espaço reservado em template deve ser um x em maiúsculas._mktemp_spreserva base e substitui o primeiro x à direita com um caractere alfabético._mktemp_ssubstitui 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_s modifica template.Em cada chamada subseqüente do mesmo processo ou thread com o mesmo template argumento, _mktemp_s verifica os nomes de arquivos que correspondem aos nomes retornados por _mktemp_s em chamadas anteriores.Se o arquivo não existe para um determinado nome, _mktemp_s retorna esse nome.Se existirem arquivos para todos retornou anteriormente nomes, _mktemp_s 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_s é 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

_mktemp_spode 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_s pode criar para o base e template valores usados neste exemplo.

No C++, a utilização dessas funções é simplificado pela sobrecargas do modelo; os métodos sobrecarregados podem inferir o comprimento do buffer automaticamente (eliminando a necessidade de especificar um argumento de tamanho) e eles podem substituir automaticamente os funções não seguras, mais antigas, com suas contrapartes mais recentes e seguras.Para obter mais informações, consulte 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.cpp
/* 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 *fnTemplate = "fnXXXXXX";
char names[5][9];

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

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

   return 0;
}

Saída de exemplo

Unique filename is fna03188
Unique filename is fnb03188
Unique filename is fnc03188
Unique filename is fnd03188
Unique filename is fne03188

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_s