Nous recommandons d’utiliser Visual Studio 2017

_mktemp, _wmktemp

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Crée un nom de fichier unique. Des versions plus sécurisées de ces fonctions sont disponibles. consultez la page _mktemp_s, _wmktemp_s.

char *_mktemp(  
   char *template   
);  
wchar_t *_wmktemp(  
   wchar_t *template   
);  
template <size_t size>  
char *_mktemp(  
   char (&template)[size]  
); // C++ only  
template <size_t size>  
wchar_t *_wmktemp(  
   wchar_t (&template)[size]  
); // C++ only  

Paramètres

template
Modèle de nom de fichier.

Chacune de ces fonctions retourne un pointeur vers le modèle modifié. La fonction retourne NULL si template est mal formé ou d'autres noms uniques ne peuvent pas être créés à partir du modèle donné.

La fonction _mktemp crée un nom de fichier unique en modifiant l'argument template. _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 ne gère pas les chaînes de caractères multioctets.

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 template 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 template doit être un x majuscule _mktemp conserve base et remplace le premier X de fin par un caractère alphabétique. _mktemp remplace le X de fin suivant par une valeur à cinq chiffres ; cette valeur est un nombre unique qui identifie le processus appelant, ou dans les applications multithread, le thread appelant.

Chaque appel réussi à _mktemp modifie template. Dans chaque appel suivant du même processus ou thread avec le même argument template, _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 template est :

fnb12345  

Si le fichier FNA12345 n'existe pas, le nom suivant retourné est de nouveau :

fna12345  

_mktemp peut créer 26 noms de fichier uniques au maximum pour toute combinaison donnée de valeurs base et template. Par conséquent, FNZ12345 est le dernier nom de fichier unique que _mktemp peut créer pour les valeurs base et template utilisées dans cet exemple.

En cas d'échec, errno est défini. Si template a un format non valide (par exemple, moins de 6 X), errno prend la valeur EINVAL. Si _mktemp ne peut pas créer un nom unique car les 26 noms de fichiers possibles existent déjà, _mktemp définit le modèle 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 Secure Template Overloads.

RoutineEn-tête requis
_mktemp<io.h>
_wmktemp<io.h> ou <wchar.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility dans l’introduction.

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

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.

Gestion de fichiers
fopen, _wfopen
_getmbcp
_getpid
_open, _wopen
_setmbcp
_tempnam, _wtempnam, tmpnam, _wtmpnam
tmpfile

Afficher: