_mktemp
, _wmktemp
Crée un nom de fichier unique. Des versions plus sécurisées de ces fonctions sont disponibles. Consultez _mktemp_s
, _wmktemp_s
.
Syntaxe
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
Paramètres
nameTemplate
Modèle de nom de fichier.
Valeur retournée
Chacune de ces fonctions retourne un pointeur vers le nameTemplate modifié. La fonction retourne NULL
si nameTemplate
elle est mal formée ou qu’aucun nom unique ne peut être créé à partir du nameTemplate donné.
Notes
La fonction _mktemp
crée un nom de fichier unique en modifiant l'argument nameTemplate
. _mktemp
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
est une version à caractères larges de _mktemp
; l'argument et la valeur de retour de _wmktemp
sont des chaînes à caractères larges. _wmktemp
et _mktemp
se comportent de la même manière, sauf que _wmktemp
cela ne gère pas les chaînes de caractères multioctets.
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 |
_mktemp |
_mktemp |
_wmktemp |
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
. Chaque caractère d’espace réservé dans nameTemplate
doit être un X majuscule. _mktemp
conserve base
et remplace le premier X de fin par un caractère alphabétique. _mktemp
remplace les caractères X de fin 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
modifie nameTemplate
. Dans chaque appel suivant du même processus ou thread avec le même argument nameTemplate
, _mktemp
recherche des noms de fichier qui correspondent aux noms retournés par _mktemp
dans les appels précédents. Si aucun fichier n'existe pour le nom spécifié, _mktemp
retourne ce nom. Si des fichiers existent pour tous les noms précédemment retournés, _mktemp
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
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
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
peut créer pour les valeurs base
et nameTemplate
utilisées dans cet exemple.
En cas d'échec, errno
est défini. Si nameTemplate
un format n’est pas valide (par exemple, moins de six caractères X) errno
est défini EINVAL
sur . Si _mktemp
elle ne parvient pas à créer un nom unique, car tous les 26 noms de fichiers possibles existent déjà, _mktemp
définit nameTemplate sur une chaîne vide et retourne EEXIST
.
En C++, ces fonctions ont des surcharges de modèle qui appellent les équivalents plus récents et sécurisés de ces fonctions. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.
Spécifications
Routine | En-tête requis |
---|---|
_mktemp |
<io.h> |
_wmktemp |
<io.h> ou <wchar.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// 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.
Voir aussi
Gestion des fichiers
fopen
, _wfopen
_getmbcp
_getpid
_open
, _wopen
_setmbcp
_tempnam
, , _wtempnam
tmpnam
, ,_wtmpnam
tmpfile