_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.