_mktemp_s, _wmktemp_s

crea un nome file univoco.queste sono versioni di _mktemp, _wmktemp con i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in CRT.

errno_t _mktemp_s(
   char *template,
   size_t sizeInChars
);
errno_t _wmktemp_s(
   wchar_t *template,
   size_t sizeInChars
);
template <size_t size>
errno_t _mktemp_s(
   char (&template)[size]
); // C++ only
template <size_t size>
errno_t _wmktemp_s(
   wchar_t (&template)[size]
); // C++ only

Parametri

  • template
    modello di nome file.

  • sizeInChars
    Dimensione del buffer i caratteri a byte singolo in _mktemp_s; caratteri di tipo " wide " in _wmktemp_s, incluso il carattere di terminazione null.

Valore restituito

Restituisce zero di entrambe le funzioni in esito positivo, un codice di errore in caso di errore.

condizioni di errore

template

sizeInChars

valore restituito

nuovo valore nel modello

NULL

qualsiasi

EINVAL

NULL

Formato non valido (vedere Remarks sezione per il formato corretto)

qualsiasi

EINVAL

stringa vuota

qualsiasi

Numero di <= di x

EINVAL

stringa vuota

Se una qualsiasi delle condizioni di errore sopra caso, il gestore non valido di parametro viene richiamato, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, errno è impostato su EINVAL e i valori restituiti da funzioni EINVAL.

Note

_mktemp_s la funzione crea un nome file univoco modificando template argomento, in modo che dopo la chiamata, template punti del puntatore su una stringa contenente il nuovo nome file._mktemp_s 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_s è una versione a caratteri estesi di _mktemp_s; l'argomento di _wmktemp_s è una stringa di caratteri estesi._wmktemp_s e _mktemp_s comportano in modo identico in caso contrario, eccetto _wmktemp_s non gestisce le stringhe di caratteri multibyte.

Mapping di routine a testo generico

routine di Tchar.h

_UNICODE e _MBCS non definiti

_MBCS definito

_UNICODE definito

_tmktemp_s

_mktemp_s

_mktemp_s

_wmktemp_s

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

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

fn

e il valore di cinque cifre fornito da l _mktemp_s sono 12345, il nome restituito sono:

fna12345

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

fnb12345

Se FNA12345 non esiste, il nome successivo restituito è ancora:

fna12345

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

In C++, utilizzando queste funzioni è semplificato dagli overload del modello; gli overload possono dedurre la lunghezza del buffer automaticamente (che elimina la necessità di specificare un argomento di dimensione) e possono sostituire automaticamente le funzioni precedenti e non sicure con le più recenti, controparti sicure.Per ulteriori informazioni, vedere Assicurarsi che gli overload del modello.

Requisiti

routine

Intestazione di associazione

_mktemp_s

<io.h>

_wmktemp_s

<io.h> o <wchar.h>

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

Esempio

// crt_mktemp_s.cpp
/* The program uses _mktemp to create
 * five unique filenames. It opens each filename
 * to ensure that the next name is unique.
 */

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

char *fnTemplate = "fnXXXXXX";
char names[5][9];

int main()
{
   int i, err, sizeInChars;
   FILE *fp;

   for( i = 0; i < 5; i++ )
   {
      strcpy_s( names[i], sizeof(names[i]), fnTemplate );
      /* Get the size of the string and add one for the null terminator.*/
      sizeInChars = strnlen(names[i], 9) + 1;
      /* Attempt to find a unique filename: */
      err = _mktemp_s( names[i], sizeInChars );
      if( err != 0 )
         printf( "Problem creating the template" );
      else
      {
         if( fopen_s( &fp, names[i], "w" ) == 0 )
            printf( "Unique filename is %s\n", names[i] );
         else
            printf( "Cannot open %s\n", names[i] );
         fclose( fp );
      }
   }

   return 0;
}

Esempio di output

Unique filename is fna03188
Unique filename is fnb03188
Unique filename is fnc03188
Unique filename is fnd03188
Unique filename is fne03188

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.

Vedere anche

Riferimenti

Gestione dei file

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile_s