Partager via


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

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
    Motif de nom de fichier.

Valeur de retour

Chacune de ces fonctions retourne un pointeur vers le fichier ouvert. La fonction retourne NULL si template est mal formé ou plusieurs noms uniques ne peuvent être créés à partir de le modèle donné.

Notes

La fonction d'_mktemp crée un seul nom de fichier en modifiant l'argument template. _mktemp gère automatiquement des arguments de chaîne de caractères multi-octets appropriés en identifiant des séquences de caractères multi-octets d'après la page de codes multioctets en cours d'utilisation par le système runtime. _wmktemp est une version caractères larges de _mktemp; l'argument et la valeur de retour de _wmktemp sont des chaînes de 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 multi-octets.

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 a 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 une lettre de l'alphabet. _mktemp remplace les X de fin suivants 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 nouveau nom en remplaçant la lettre qu'il a utilisée 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 prénom retourné est :

fna12345

Si ce nom est utilisé pour créer le fichier FNA12345 et ce fichier existe toujours, le nom suivant retourné sur un appel du même processus ou thread avec le même base pour template est :

fnb12345

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

fna12345

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

En cas de échec, errno est défini. Si template a un format non valide (par exemple, moins de 6 x), errno a la valeur EINVAL. Si _mktemp impossible de créer un nom unique car les noms de fichiers 26 possibles existe déjà, _mktemp définit le modèle avec 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.

Configuration requise

Routine

En-tête requis

_mktemp

<io.h,>

_wmktemp

<io.h> ou <wchar.h>

Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.

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 );
      }
   }
}
  

Équivalent .NET Framework

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

Voir aussi

Référence

Gestion de fichiers

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile