_mktemp, _wmktemp

Restituisce un nome file univoco.Più versioni sicure di queste funzioni sono disponibili, vedere _mktemp_s, _wmktemp_s.

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

Parametri

  • template
    Criterio per il nome file.

Valore restituito

Ognuna di queste funzioni restituisce un puntatore al modello modificato.La funzione restituisce NULL se template è corretto e o non più nome univoco può essere creato dal modello specificato.

Note

La funzione _mktemp crea un nome file univoco modificando l'argomento template._mktemp gestisce automaticamente gli argomenti della stringa con caratteri multibyte in base alle proprie esigenze, riconoscere le sequenze di caratteri multibyte in base alla tabella codici multibyte attualmente in uso dal sistema in fase di esecuzione._wmktemp è una versione a caratteri estesi di _mktemp; gli argomenti e i valori restituiti di _wmktemp sono stringhe con caratteri estesi._wmktemp e _mktemp si comportano in modo identico in caso contrario, ma _wmktemp non gestisce le stringhe di caratteri multibyte.

Mapping di routine a Testo generico

Routine Tchar.h

_UNICODE e _MBCS non definiti

_MBCS definito

_UNICODE definito

_tmktemp

_mktemp

_mktemp

_wmktemp

L'argomento template presenta il formato base, dove base è la parte del nuovo nome file specificati e ogni X è un segnaposto per un carattere fornito da _mktemp.Ogni carattere segnaposto in template deve essere una maiuscola. X._mktemp mantiene base e sostituisce la prima X di trascinamento con un carattere alfabetico._mktemp sostituisce le seguenti x finali con un valore pari a cinque cifre; questo valore è un numero univoco che identifica il processo chiamante, o programmi multithread, il thread chiamante.

Ogni corrispondenza chiamata a _mktemp modifica template.In ogni chiamata successiva dallo stesso processo o thread con lo stesso argomento template, controlli _mktemp per i nomi di file nomi di corrispondenza restituiti da _mktemp in chiamate precedenti.Se tale file non esiste per un nome specificato, restituisce _mktemp di da parte.Se i file disponibili per tutti i nomi in precedenza restituiti, _mktemp crea un nuovo nome sostituendo il carattere alfabetico che utilizza il nome in precedenza restituito con la lettera minuscola successivo disponibile, in ordine, "da" e "z".Ad esempio, se base se:

fn

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

fna12345

Se questo nome viene utilizzato per creare il file FNA12345 tale file esiste ancora, il nome successivo restituito di una chiamata dallo stesso processo o thread con lo stesso base per template è:

fnb12345

Se il nome dell'attributo non esiste, viene restituito .

fna12345

_mktemp possibile creare un massimo di 26 nomi file univoci per qualsiasi combinazione specifica di valori del modello e di base.Pertanto, FNZ12345 è l'ultimo nome file univoco _mktemp può creare per i valori template e base utilizzati in questo esempio.

In caso di errore, errno è impostato su.Se template ha un formato non valido (ad esempio, un massimo di 6 x), errno è impostato su EINVAL.Se _mktemp non è possibile creare un nome univoco in quanto tutti e 26 i nomi file possibili sono già presenti, _mktemp imposta il modello a una stringa vuota e restituisce EEXIST.

In C++, queste funzioni hanno modelli di overload che invocano le più recenti, controparti sicure di queste.Per ulteriori informazioni, vedere Assicurarsi che gli overload del modello.

Requisiti

Routine

Intestazione obbligatoria

_mktemp

<io.h>

_wmktemp

<io.h> o <wchar.h>

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

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

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

Gestione dei file

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile