_mktemp_s
, _wmktemp_s
Crée un nom de fichier unique. Ces fonctions sont des versions de _mktemp
, _wmktemp
avec des améliorations de sécurité, comme indiqué dans Fonctionnalités de sécurité dans le CRT.
Syntaxe
errno_t _mktemp_s(
char *nameTemplate,
size_t sizeInChars
);
errno_t _wmktemp_s(
wchar_t *nameTemplate,
size_t sizeInChars
);
template <size_t size>
errno_t _mktemp_s(
char (&nameTemplate)[size]
); // C++ only
template <size_t size>
errno_t _wmktemp_s(
wchar_t (&nameTemplate)[size]
); // C++ only
Paramètres
nameTemplate
Modèle de nom de fichier.
sizeInChars
Taille de la mémoire tampon en caractères codés sur un octet (_mktemp_s
) ou en caractères larges (_wmktemp_s
), marque de fin Null comprise.
Valeur retournée
Ces deux fonctions retournent zéro en cas de réussite, sinon un code d’erreur.
Conditions d’erreur
nameTemplate |
sizeInChars |
Valeur retournée | Nouvelle valeur dans nameTemplate |
---|---|---|---|
NULL |
n'importe laquelle | EINVAL |
NULL |
Format incorrect (voir la section Remarques pour un format correct) | n'importe laquelle | EINVAL |
chaîne vide |
n'importe laquelle | <= nombre de caractères X | EINVAL |
chaîne vide |
Si l’une des conditions d’erreur ci-dessus se produit, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à se poursuivre, errno
est défini sur EINVAL
et la fonction retourne EINVAL
.
Notes
La fonction _mktemp_s
crée un nom de fichier unique en modifiant l’argument nameTemplate
, afin qu’après l’appel, le pointeur nameTemplate
désigne une chaîne qui contient le nouveau nom de fichier. _mktemp_s
gère automatiquement les arguments de chaîne de caractères multioctets selon le cas, en identifiant les séquences de caractères multioctets en fonction de la page de codes multioctets en cours d'utilisation par le système d'exécution. _wmktemp_s
est une version à caractères larges de _mktemp_s
; l’argument de _wmktemp_s
est une chaîne à caractères larges. _wmktemp_s
et _mktemp_s
se comportent de la même manière, sauf que _wmktemp_s
cela ne gère pas les chaînes de caractères multioctets.
Les versions de bibliothèque de débogage de ces fonctions remplissent d’abord la mémoire tampon avec 0xFE. Pour désactiver ce comportement, utilisez _CrtSetDebugFillThreshold
.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Mappages de routines de texte générique
Routine Tchar.h | _UNICODE et _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_tmktemp_s |
_mktemp_s |
_mktemp_s |
_wmktemp_s |
L’argument nameTemplate
se présente sous la forme baseXXXXXX
, où base
est la partie du nouveau nom de fichier que vous spécifiez et chaque X est un espace réservé pour un caractère fourni par _mktemp_s
. Chaque caractère d’espace réservé dans nameTemplate
doit être un X majuscule. _mktemp_s
conserve base
et remplace le premier X de fin par un caractère alphabétique. _mktemp_s
remplace les caractères X qui suivent par une valeur à cinq chiffres. Cette valeur est un numéro unique qui identifie le processus appelant, ou dans les programmes multithreads, le thread appelant.
Chaque appel réussi à _mktemp_s
modifie nameTemplate
. Dans chaque appel suivant du même processus ou thread avec le même argument nameTemplate
, _mktemp_s
recherche des noms de fichier qui correspondent aux noms retournés par _mktemp_s
dans les appels précédents. Si aucun fichier n'existe pour le nom spécifié, _mktemp_s
retourne ce nom. Si des fichiers existent pour tous les noms précédemment retournés, _mktemp_s
crée un nom en remplaçant le caractère alphabétique utilisé dans le nom précédemment retourné par la lettre minuscule suivante disponible, dans l'ordre, de "a" à "z". Par exemple, si base
est :
fn
et la valeur à cinq chiffres fournie par _mktemp_s
est 12345, le premier nom retourné est :
fna12345
Si ce nom est utilisé pour créer le fichier FNA12345 et si ce fichier existe toujours, le nom suivant retourné sur un appel du même processus ou thread avec la même valeur base
pour nameTemplate
est :
fnb12345
Si FNA12345 n’existe pas, le nom suivant retourné est à nouveau :
fna12345
_mktemp_s
peut créer un maximum de 26 noms de fichiers uniques pour n’importe quelle combinaison donnée de base
fichiers et nameTemplate
valeurs. Par conséquent, FNZ12345 est le dernier nom de fichier unique que _mktemp_s
peut créer pour les valeurs base
et nameTemplate
utilisées dans cet exemple.
En C++, l’utilisation de ces fonctions est simplifiée par les surcharges de modèle ; les surcharges peuvent déduire la longueur de la mémoire tampon automatiquement (ce qui évite d’avoir à spécifier un argument taille) et peuvent remplacer automatiquement les fonctions plus anciennes et non sécurisées par leurs équivalentes plus récentes et sécurisées. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.
Spécifications
Routine | En-tête requis |
---|---|
_mktemp_s |
<io.h> |
_wmktemp_s |
<io.h> ou <wchar.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// 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;
}
Exemple de sortie
Unique filename is fna03188
Unique filename is fnb03188
Unique filename is fnc03188
Unique filename is fnd03188
Unique filename is fne03188
Voir aussi
Gestion des fichiers
fopen
, _wfopen
_getmbcp
_getpid
_open
, _wopen
_setmbcp
_tempnam
, , _wtempnam
tmpnam
, ,_wtmpnam
tmpfile_s