Condividi tramite


_mktemp, _wmktemp

Crea un nome di file univoco. Sono disponibili versioni più sicure di queste funzioni; vedere _mktemp_s, _wmktemp_s.

Sintassi

char *_mktemp(
   char *nameTemplate
);
wchar_t *_wmktemp(
   wchar_t *nameTemplate
);
template <size_t size>
char *_mktemp(
   char (&nameTemplate)[size]
); // C++ only
template <size_t size>
wchar_t *_wmktemp(
   wchar_t (&nameTemplate)[size]
); // C++ only

Parametri

nameTemplate
Modello di nome di file.

Valore restituito

Ognuna di queste funzioni restituisce un puntatore al nome modificatoTemplate. La funzione restituisce NULL se nameTemplate è in formato non corretto o non è possibile creare altri nomi univoci dal nome specificatoTemplate.

Osservazioni:

La funzione _mktemp crea un nome di file univoco modificando l'argomento nameTemplate. _mktemp gestisce automaticamente e in modo appropriato gli argomenti stringa di caratteri multibyte, riconoscendo le sequenze di caratteri multibyte in base alla tabella codici multibyte in uso nel sistema di runtime. _wmktemp è una versione a caratteri wide di _mktemp. L'argomento e il valore restituito di _wmktemp sono stringhe a caratteri wide. _wmktemp e _mktemp si comportano in modo identico, ad eccezione del fatto che _wmktemp non gestisce stringhe di caratteri multibyte.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Mapping di routine di testo generico

Routine Tchar.h _UNICODE e _MBCS non definito _MBCS definito _UNICODE definito
_tmktemp _mktemp _mktemp _wmktemp

L'argomento nameTemplate ha il formato baseXXXXXX, dove base è la parte del nome del nuovo file che viene fornito e ogni X è un segnaposto per un carattere fornito da _mktemp. Ogni carattere del segnaposto in nameTemplate deve essere una X maiuscola. _mktemp mantiene base e sostituisce la prima X finale con un carattere alfabetico. _mktemp sostituisce i caratteri X finali con un valore a cinque cifre. Questo valore è un numero univoco che identifica il processo chiamante o nei programmi multithreading, il thread chiamante.

Ogni chiamata riuscita a _mktemp modifica nameTemplate. In ogni chiamata successiva dallo stesso processo o thread con lo stesso argomento nameTemplate, _mktemp controlla se sono presenti nomi di file corrispondenti ai nomi restituiti da _mktemp nelle chiamate precedenti. Se non esiste alcun file per un determinato nome, _mktemp restituisce tale nome. Se sono presenti file per tutti i nomi restituiti in precedenza, _mktemp crea un nuovo nome sostituendo il carattere alfabetico usato nel nome restituito in precedenza con la successiva lettera minuscola disponibile, in ordine dalla 'a' alla 'z'. Ad esempio, se base è:

fn

e il valore di cinque cifre fornito da _mktemp è 12345, il primo nome restituito è:

fna12345

Se questo nome viene usato per creare il file FNA12345 e questo file esiste ancora, il successivo nome restituito per una chiamata dallo stesso processo o thread con lo stesso valore base per nameTemplate è:

fnb12345

Se FNA12345 non esiste, il nome successivo restituito è di nuovo:

fna12345

_mktemp può creare un massimo di 26 nomi di file univoci per qualsiasi combinazione di base valori e nameTemplate specificati. Pertanto, FNZ12345 è l'ultimo nome di file univoco che _mktemp può creare per i valori base e nameTemplate usati in questo esempio.

In caso di errore viene impostato errno. Se nameTemplate ha un formato non valido (ad esempio, meno di sei caratteri X), errno è impostato su EINVAL. Se _mktemp non è possibile creare un nome univoco perché esistono già tutti i 26 nomi di file possibili, _mktemp imposta nameTemplate su una stringa vuota e restituisce EEXIST.

In C++ queste funzioni presentano overload di modello che richiamano le relative controparti più recenti e sicure. Per altre informazioni, vedere Proteggere gli overload dei modelli.

Requisiti

Ciclo Intestazione obbligatoria
_mktemp <io.h>
_wmktemp <io.h> o <wchar.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

// crt_mktemp.c
// compile with: /W3
/* The program uses _mktemp to create
* unique filenames. It opens each filename
* to ensure that the next name is unique.
*/

#include <io.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>

char *template = "fnXXXXXX";
char *result;
char names[27][9];

int main( void )
{
   int i;
   FILE *fp;

   for( i = 0; i < 27; i++ )
   {
      strcpy_s( names[i], sizeof( names[i] ), template );
      /* Attempt to find a unique filename: */
      result = _mktemp( names[i] );  // C4996
      // Note: _mktemp is deprecated; consider using _mktemp_s instead
      if( result == NULL )
      {
         printf( "Problem creating the template\n" );
         if (errno == EINVAL)
         {
             printf( "Bad parameter\n");
         }
         else if (errno == EEXIST)
         {
             printf( "Out of unique filenames\n");
         }
      }
      else
      {
         fopen_s( &fp, result, "w" );
         if( fp != NULL )
            printf( "Unique filename is %s\n", result );
         else
            printf( "Cannot open %s\n", result );
         fclose( fp );
      }
   }
}
Unique filename is fna03912
Unique filename is fnb03912
Unique filename is fnc03912
Unique filename is fnd03912
Unique filename is fne03912
Unique filename is fnf03912
Unique filename is fng03912
Unique filename is fnh03912
Unique filename is fni03912
Unique filename is fnj03912
Unique filename is fnk03912
Unique filename is fnl03912
Unique filename is fnm03912
Unique filename is fnn03912
Unique filename is fno03912
Unique filename is fnp03912
Unique filename is fnq03912
Unique filename is fnr03912
Unique filename is fns03912
Unique filename is fnt03912
Unique filename is fnu03912
Unique filename is fnv03912
Unique filename is fnw03912
Unique filename is fnx03912
Unique filename is fny03912
Unique filename is fnz03912
Problem creating the template.
Out of unique filenames.

Vedi anche

Gestione dei file
fopen, _wfopen
_getmbcp
_getpid
_open, _wopen
_setmbcp
_tempnam, _wtempnam, tmpnam_wtmpnam
tmpfile