_tempnam
, _wtempnam
, tmpnam
_wtmpnam
Genera i nomi che è possibile usare per creare file temporanei. Sono disponibili versioni più sicure di alcune di queste funzioni; vedere tmpnam_s
, _wtmpnam_s
.
Sintassi
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
);
Parametri
prefix
Stringa anteporta ai nomi restituiti da _tempnam
.
dir
Percorso usato nel nome del file se non è presente alcuna variabile di ambiente TMP o se TMP non è una directory valida.
str
Puntatore che contiene il nome generato, identico al nome restituito dalla funzione. È un modo pratico per salvare il nome generato.
Valore restituito
Ognuna di queste funzioni restituisce un puntatore al nome generato o NULL
in caso di errore. L'errore può verificarsi se si tenta più di TMP_MAX
(vedere STDIO. H) chiama con tmpnam
o se si usa _tempnam
e esiste un nome di directory non valido specificato nella TMP
variabile di ambiente e nel dir
parametro .
Nota
I puntatori restituiti da tmpnam
e _wtmpnam
puntano a buffer statici interni. free
non deve essere chiamato per deallocare tali puntatori. È necessario chiamare free
per i puntatori allocati da _tempnam
e _wtempnam
.
Osservazioni:
Ognuna di queste funzioni restituisce il nome di un file che non esiste attualmente. tmpnam
restituisce un nome univoco nella directory temporanea di Windows designata restituita da GetTempPathW
. _tempnam
genera un nome univoco in una directory diversa da quella designata. Quando un nome file viene anteporto a una barra rovesciata e nessuna informazione sul percorso, ad esempio \fname21
, indica che il nome è valido per la directory di lavoro corrente.
Per tmpnam
, è possibile archiviare questo nome del file generato in str
. Se str
è NULL
, tmpnam
lascia il risultato in un buffer interno statico. Le eventuali chiamate successive eliminano quindi questo valore. Il nome generato da tmpnam
è costituito da un nome di file generato dal programma e, dopo la prima chiamata a tmpnam
, un'estensione di file composta da numeri sequenziali in base 32 (.1-.vvu, quando TMP_MAX
in STDIO.H è 32.767).
_tempnam
genera un nome di file univoco per una directory scelta dalle regole seguenti:
Se la variabile di ambiente TMP è definita e impostata su un nome di directory valido, i nomi di file univoci vengono generati per la directory specificata da TMP.
Se la variabile di ambiente TMP non è definita o se è impostata sul nome di una directory che non esiste,
_tempnam
usa ildir
parametro come percorso per il quale genera nomi univoci.Se la variabile di ambiente TMP non è definita o se è impostata sul nome di una directory che non esiste e se
dir
èNULL
o è impostata sul nome di una directory che non esiste,_tempnam
usa la directory di lavoro corrente per generare nomi univoci. Attualmente, se sia TMP chedir
specificano nomi di directory che non esistono, la chiamata di funzione _tempnam ha esito negativo.
Il nome restituito da _tempnam
è una concatenazione di prefix
e un numero sequenziale, che combina per creare un nome di file univoco per la directory specificata. _tempnam
genera nomi di file senza estensione. _tempnam
usa malloc
per allocare spazio per il nome file; il programma è responsabile della liberazione di questo spazio quando non è più necessario.
_tempnam
e tmpnam
gestiscono automaticamente gli argomenti stringa di caratteri multibyte in modo appropriato, riconoscendo le sequenze di caratteri multibyte in base alla tabella codici OEM ottenuta dal sistema operativo. _wtempnam
è una versione a caratteri wide di _tempnam
. Gli argomenti e il valore restituito di _wtempnam
sono stringhe di caratteri wide. _wtempnam
e _tempnam
si comportano in modo identico, ad eccezione del fatto che _wtempnam
non gestisce stringhe di caratteri multibyte. _wtmpnam
è una versione a caratteri wide di tmpnam
. L'argomento e il valore restituito di _wtmpnam
sono stringhe a caratteri wide. _wtmpnam
e tmpnam
si comportano in modo identico, ad eccezione del fatto che _wtmpnam
non gestisce stringhe di caratteri multibyte.
Se _DEBUG
e _CRTDBG_MAP_ALLOC
sono definiti _tempnam
e _wtempnam
vengono sostituiti da chiamate a _tempnam_dbg
e _wtempnam_dbg
.
Mapping di routine di testo generico
Routine TCHAR.H | _UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_ttmpnam |
tmpnam |
tmpnam |
_wtmpnam |
_ttempnam |
_tempnam |
_tempnam |
_wtempnam |
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
_tempnam |
<stdio.h> |
_wtempnam , _wtmpnam |
<stdio.h> o <wchar.h> |
tmpnam |
<stdio.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// temporary directory, and _tempname to create a unique filename
// in C:\\tmp.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char * name1 = NULL;
char * name2 = NULL;
char * name3 = 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);
}
// Unset TMP environment variable, then create a temporary filename in C:\tmp.
if (_putenv("TMP=") != 0) {
printf("Could not remove TMP environment variable.\n");
}
// With TMP unset, we'll use C:\tmp as the temporary directory.
// Create a temporary filename in C:\tmp with prefix "stq".
if ((name3 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name3);
}
else {
printf("Cannot create a unique filename\n");
}
// When name3 is no longer needed:
if (name3) {
free(name3);
}
return 0;
}
C:\Users\LocalUser\AppData\Local\Temp\sriw.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\stq2 is safe to use as a temporary file.
c:\tmp\stq3 is safe to use as a temporary file.