_tempnam, _wtempnam, tmpnam, _wtmpnam
Gerencia nomes que você pode usar para criar arquivos temporários. Versões mais seguras de algumas dessas funções estão disponíveis; consulte 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 cadeia de caracteres que pre-pended aos nomes retornado por _tempnam.dir
O caminho usado no nome do arquivo se não houver nenhuma variável de ambiente de 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. Essa é uma maneira conveniente de salvar o nome gerado.
Valor de retorno
Cada uma dessas funções retorna um ponteiro para o nome gerado ou a NULL se houver uma falha. A falha pode ocorrer se você tentar mais do que TMP_MAX (consulte) STDIO.H chama com tmpnam ou se você usar _tempname há um nome de diretório inválido especificado na variável de ambiente e TMP do parâmetro de dir .
Dica
Os ponteiros retornados por tmpnam e pelo ponto de _wtmpnam aos buffers internos estáticos.livre não deve ser chamado para desalocar os ponteiros.free precisa ser chamado para os ponteiros atribuídos por _tempnam e por _wtempnam.
Comentários
Cada uma dessas funções retorna o nome de um arquivo que não existe no momento. tmpnam retorna um nome exclusivo no diretório de trabalho atual e _tempnam permite gerar um nome exclusivo em um diretório diferente atual. A observe que quando um nome de arquivo pre-pended com uma barra invertida e nenhuma informação de caminho, como \ fname21, isso indicará que o nome é válido para o diretório de trabalho atual.
Para tmpnam, você pode armazenar este nome de arquivo gerado em str. Se str é NULL, então tmpnam permite que o resultado em um buffer interno estático. Para todas as chamadas subsequentes destroem esse valor. O nome gerado por tmpnam consiste em um nome de arquivo gerado por programa e, depois da primeira chamada a tmpnam, uma extensão de arquivo de números sequenciais na base 32 (.1-.vvu, quando TMP_MAX em STDIO.H é 32.767).
_tempnam gerará um nome de arquivo exclusivo para um diretório escolhido por seguintes regras:
Se a variável de ambiente de TMP é definido e definido como um nome de diretório válido, os nomes de arquivo exclusivos serão gerados para o diretório especificado por TMP.
Se a variável de ambiente de TMP não é definido ou se for definido como o nome de um diretório que não existe, _tempnam usará o parâmetro de dir como o caminho para que gerará nomes exclusivos.
Se a variável de ambiente de TMP não é definido ou se for 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 TMP e nomes de diretórios dir especificam que não existem, a chamada da função de _tempnam falhará.
O nome retornado por _tempnam será uma concatenação de prefix e um número sequencial, que combina para criar um nome de arquivo exclusivo para o diretório especificado. _tempnam gerencia os nomes de arquivo que não têm nenhuma extensão. _tempnam usa malloc para alocar espaço para o nome do arquivo; o programa é responsável para liberar esse espaço quando ele não for mais necessário.
_tempnam e de tmpnam argumentos de cadeia de caracteres de multibyte- caractere de identificador automaticamente conforme apropriado, confirmando sequências de multibyte- caractere de acordo com a página de código OEM obtida do sistema operacional. _wtempnam é uma versão de ampla caractere de _tempnam; os argumentos e o valor de retorno de _wtempnam são cadeias de caracteres de ampla caractere. _wtempnam e _tempnam se comportam idêntica exceto que _wtempnam não trata as cadeias de caracteres de multibyte- caractere. _wtmpnam é uma versão de ampla caractere de tmpnam; o argumento e o valor de retorno de _wtmpnam são cadeias de caracteres de ampla caractere. _wtmpnam e tmpnam se comportam idêntica exceto que _wtmpnam não trata as cadeias de caracteres de multibyte- caractere.
Se _DEBUG e _CRTDBG_MAP_ALLOC são definidos, _tempnam e _wtempnam são substituídos por chamadas a _tempnam_dbg e _wtempnam_dbg.
Mapeamentos da rotina de texto genérico
Rotina TCHAR.H |
_UNICODE & _MBCS não definido |
_MBCS 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 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 padrão de C, use PInvoke. Para obter mais informações, consulte Exemplos de chamadas de plataformas.