_mktemp, _wmktemp

Crée un nom de fichier unique. Des versions plus sécurisées de ces fonctions sont disponibles ; voir _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 routine de texte générique

Routine Tchar.h _UNICODE et _MBCS non défini _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 EINVALsur . 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 Surcharges de modèles sécurisés.

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