Condividi tramite


_tempnam, _wtempnam, tmpnam, _wtmpnam

Genera nomi utilizzabili per creare i file temporanei. Sono disponibili versioni più sicure di alcune di queste funzioni; vedere 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 
);

Parametri

  • prefix
    La stringa che verrà preposta ai nomi restituiti da _tempnam.

  • dir
    Il percorso utilizzato nel nome file se non viene trovata alcuna variabile di ambiente TMP o, se TMP non è una directory valida.

  • str
    Puntatore che utilizzerà il nome generato e sarà identico al nome restituito dalla funzione. Si tratta di un modo pratico per salvare il nome generato.

Valore restituito

Ognuna di queste funzioni restituisce un puntatore al nome generato o a NULL se avviene un errore. L'errore può verificarsi se si tentano più TMP_MAX (vedere STDIO.H) chiamate con tmpnam o se si utilizza _tempnamed esiste un nome di directory non valido specificato nella variabile di ambiente TMP e nel parametro dir.

Nota

I puntatori restituiti da tmpnam e da _wtmpnam puntano ai buffer statici interni.free non deve essere chiamato per deallocare i puntatori.free deve essere chiamato per i puntatori allocati da _tempnam e da _wtempnam.

Note

Ognuna di queste funzioni restituisce il nome di un file che correntemente non esiste. tmpnam restituisce un nome univoco nella cartella di lavoro corrente e _tempnam consente di generare un nome univoco in una directory diversa da quella corrente. È importante notare che quando un file è preceduto da una barra rovesciata e non sono presenti informazioni sul percorso, come \fname21, significa che il nome è valido per la cartella di lavoro corrente.

Per tmpnam, è possibile archiviare questo nome file generato in str. Se str è NULL, allora tmpnam lascia il risultato in un buffer statico interno. Pertanto tutte le chiamate successive eliminano questo valore. Il nome generato da tmpnam è costituito da un nome di file generato da un programma e, dopo la prima chiamata a tmpnam, da un'estensione di file composta da numeri sequenziali in base 32 (.1-.vvu, quando TMP_MAX in STDIO.H è 32.767).

_tempnam genererà un nome file univoco per una directory scelta in base alle seguenti regole:

  • Se la variabile di ambiente TMP è definita e impostata su un nome di directory valido, i nomi file univoci verranno generati per la directory specificata da TMP.

  • Se la variabile di ambiente TMP non è definita o se viene impostata al nome di una directory che non esiste, _tempnam utilizzerà il parametro dir come percorso per cui verranno generati i nomi univoci.

  • Se la variabile di ambiente TMP non è definita o se viene impostata al nome di una directory che non esiste, e se dir è NULL o impostato al nome di una directory che non esiste, _tempnam utilizzerà la cartella di lavoro corrente per generare nomi univoci. Attualmente, se sia TMP che il dir specificano nomi di directory che non esistono, la chiamata di funzione di _tempnam avrà esito negativo.

Il nome restituito da _tempnam sarà una concatenazione tra prefix e un numero sequenziale, che verranno combinati per creare un nome file univoco per la directory specificata. _tempnam genera nomi file che non hanno estensione. _tempnam utilizza malloc per allocare spazio per nome del file; il programma è responsabile di liberare tale spazio quando non è più necessario.

_tempnam e tmpnam gestiscono automaticamente gli argomenti di stringa con 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 estesi di _tempnam; gli argomenti e i valori restituiti di _wtempnam sono stringhe con caratteri estesi. _wtempnam e _tempnam si comportano in modo identico in caso contrario, ma _wtempnam non gestisce le stringhe di caratteri multibyte. _wtmpnam è una versione a caratteri estesi di tmpnam; gli argomenti e i valori restituiti di _wtmpnam sono stringhe con caratteri estesi. _wtmpnam e tmpnam si comportano in modo identico in caso contrario, ma _wtmpnam non gestisce le 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 & _MBCS non definiti

_MBCS definito

_UNICODE definito

_ttmpnam

tmpnam

tmpnam

_wtmpnam

_ttempnam

_tempnam

_tempnam

_wtempnam

Requisiti

Routine

Intestazione obbligatoria

_tempnam

<stdio.h>

_wtempnam, _wtmpnam

<stdio.h> o <wchar.h>

tmpnam

<stdio.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'Introduzione.

Esempio

// 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);
     
}
  

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

Vedere anche

Riferimenti

I/O di flusso

_getmbcp

malloc

_setmbcp

tmpfile

tmpfile_s