Compartilhar via


_tempnam, _wtempnam, tmpnam, _wtmpnam

Gere nomes que você pode usar para criar arquivos temporários.Versões mais seguras do que algumas dessas funções estão disponíveis; see tmpnam_s, _wtmpnam_s.

char *_tempnam(
   const char *dir,
   const char *prefix 
);
wchar_t *_wtempnam(
   const wchar_t *dir,
   const wchar_t *prefix 
);
char *tmpnam(
   char *str 
);
wchar_t *_wtmpnam(
   wchar_t *str 
);

Parâmetros

  • prefix
    A seqüência de caracteres que seja antecedidos nomes retornados por _tempnam.

  • dir
    O caminho usado no nome do arquivo se não houver nenhuma variável de ambiente TMP, ou se TMP não é um diretório válido.

  • str
    Ponteiro que conterá o nome gerado e será idêntico ao nome retornado pela função.Isso é uma maneira conveniente para salvar o nome gerado.

Valor de retorno

Cada uma dessas funções retorna um ponteiro para o nome gerado ou NULL se houver uma falha.Falha pode ocorrer se você tentar mais de TMP_MAX (consulte STDIO.H) chamadas com tmpnam ou se você usar _tempname há um nome de diretório inválido especificado na variável de ambiente TMP e na dir parâmetro.

ObservaçãoObservação

Os ponteiros retornados por tmpnam e _wtmpnam aponte para buffers internos de estáticos.livre não deve ser chamado para desalocar os ponteiros.freeprecisa ser chamado para ponteiros alocados pelo _tempnam e _wtempnam.

Comentários

Cada uma dessas funções retorna o nome de um arquivo que não existe atualmente.tmpnamRetorna um nome exclusivo no diretório de trabalho atual e _tempnam permite gerar um nome exclusivo em um diretório diferente do atual.Observe que quando um nome de arquivo é antecedidos com uma barra invertida e nenhuma informação de caminho, como, por exemplo, \fname21, isso indica que o nome é válido para o diretório de trabalho atual.

Para tmpnam, você pode armazenar esse nome de arquivo gerado no str.Se str é NULL, em seguida, tmpnam deixa o resultado em um buffer interno de estático.Assim, todas as chamadas subseqüentes destruam este valor.O nome gerado por tmpnam consiste em um nome de arquivo gerado pelo programa e, após a primeira chamada para tmpnam, uma extensão de arquivo de números seqüenciais em 32 base (when. 1-.vvu, TMP_MAX em STDIO.H é 32.767).

_tempnamirá gerar um nome de arquivo exclusivo para um diretório escolhido pelas seguintes regras:

  • Se a variável de ambiente TMP é definida e definida como um nome de diretório válido, nomes de arquivo exclusivo serão gerados para o diretório especificado por TMP.

  • Se a variável de ambiente TMP não for definida ou se ele estiver definido como o nome de um diretório que não existe, _tempnam usará o dir parâmetro como o caminho para o qual ele irá gerar nomes exclusivos.

  • Se a variável de ambiente TMP não está definida ou se ele estiver definido como o nome de um diretório que não existe e se dir é NULL ou defina como o nome de um diretório que não existe, _tempnam usará o diretório de trabalho atual para gerar nomes exclusivos.Atualmente, se ambos os TMP e dir especificar nomes de diretórios não existirem, o _tempnam a chamada de função falhará.

O nome retornado por _tempnam será uma concatenação do prefix e um número seqüencial que serão combinados para criar um nome de arquivo exclusivo para o diretório especificado._tempnamgera nomes de arquivo com nenhuma extensão._tempnamusa malloc para alocar espaço para nome de arquivo; o programa é responsável por liberar esse espaço quando ele não é mais necessária.

_tempname tmpnam obtidos automaticamente a argumentos de seqüência de caracteres multibyte alça conforme apropriado, reconhecendo as seqüências de caracteres multibyte de acordo com a página de código OEM do sistema operacional._wtempnamé uma versão de caractere largo de _tempnam; os argumentos e o valor de retorno de _wtempnam são seqüências de caracteres largos._wtempname _tempnam se comportam de forma idêntica, exceto que _wtempnam não processa as seqüências de caracteres de multibyte._wtmpnamé uma versão de caractere largo de tmpnam; o valor de argumento e o retorno de _wtmpnam são seqüências de caracteres largos._wtmpname tmpnam se comportam de forma idêntica, exceto que _wtmpnam não processa as seqüências de caracteres de multibyte.

Se _DEBUG e _CRTDBG_MAP_ALLOC são definidos, _tempnam e _wtempnam são substituídos por chamadas para _tempnam_dbg e _wtempnam_dbg.

Mapeamentos de rotina de texto genérico

TCHAR.Rotina H

_ Unicode & _ MBCS do arquivo não definido

_ MBCS do arquivo definido

_ Unicode definido

_ttmpnam

tmpnam

tmpnam

_wtmpnam

_ttempnam

_tempnam

_tempnam

_wtempnam

Requisitos

Rotina

Cabeçalho necessário

_tempnam

<stdio.h>

_wtempnam, _wtmpnam

<stdio.h> ou <wchar.h>

tmpnam

<stdio.h>

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

Exemplo

// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// current working directory, then uses _tempnam to create 
// a unique filename with a prefix of stq. 

#include <stdio.h>
#include <stdlib.h>

int main( void )
{   
   char* name1 = NULL;
   char* name2 = NULL;

   // Create a temporary filename for the current working directory: 
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );

   // Create a temporary filename in temporary directory with the
   // prefix "stq". The actual destination directory may vary
   // depending on the state of the TMP environment variable and
   // the global variable P_tmpdir.   

   if( ( name2 = _tempnam( "c:\\tmp", "stq" ) ) != NULL )
      printf( "%s is safe to use as a temporary file.\n", name2 ); 
   else
      printf( "Cannot create a unique filename\n" );

   // When name2 is no longer needed :   
   if(name2)
     free(name2);
     
}
  
  
  

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

Fluxo de i/O

_getmbcp

malloc

_setmbcp

tmpfile

tmpfile_s