Share via


_mktemp, _wmktemp

Crée un nom de fichier unique.plus les versions 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
    profil de nom.

Valeur de retour

Chacune de ces fonctions retourne un pointeur vers le modèle modifié.La fonction retourne NULL si template est incorrect ou plus de noms uniques ne peuvent être créés du modèle donné.

Notes

La fonction d' _mktemp crée un nom de fichier unique en modifiant l'argument d' template ._mktemp gère automatiquement les arguments de chaîne de caractères multioctets comme approprié, l'identification des séquences de caractères multioctets d'après la page de codes multioctets actuellement utilisé par le système runtime._wmktemp est une version à caractère élargi d' _mktemp; l'argument et que la valeur de retour d' _wmktemp sont des chaînes à caractères larges._wmktemp et _mktemp se comportent de sinon, sauf qu' _wmktemp ne gère pas les chaînes de caractères multioctets.

mappages de routines de texte générique

routine de Tchar.h

_UNICODE et _MBCS non définis

_MBCS défini

_UNICODE défini

_tmktemp

_mktemp

_mktemp

_wmktemp

L'argument d' template a la forme base, où base est la partie du nouveau nom de fichier que vous fournissez 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 majuscule X._mktemp conserve base et remplace le premier X de fin par une lettre._mktemp remplace les x de fin suivants par une valeur à cinq chiffres ; cette valeur est un nombre unique identifiant le processus appelant, ou dans les programmes multithreads, le thread appelant.

Chaque appel a abouti à_mktemp modifie template.Dans chaque appel suivant du même processus ou threads avec le même argument d' template , contrôles d' _mktemp pour les noms de fichiers que les noms de correspondance retournés par _mktemp dans les appels précédents.Si aucun fichier n'existe pour un nom, le retour d' _mktemp ce nom.Si les 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é avec la lettre minuscule suivante disponible, dans l'ordre, « 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 encore, le nom suivant retourné sur un appel de le même processus ou threads avec la 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 fichiers uniques pour toute combinaison données des valeurs de base et de modèle.Par conséquent, FNZ12345 est le dernier nom de fichier unique _mktemp peut créer pour base et template a utilisé dans cet exemple.

En cas de échec, errno est défini.si template a un format valide (par exemple, moins de 6 x), errno est défini à EINVAL.Si _mktemp impossible de créer un nom unique car chacun des 26 noms de fichiers possibles existe déjà, _mktemp définit le modèle à une chaîne vide et retourne EEXIST.

En C++, ces fonctions ont des surcharges de modèle qui appellent plus le nouveau, sécuriser des équivalents de ces fonctions.Pour plus d'informations, consultez Surcharges sécurisées de modèle.

Configuration requise

routine

en-tête requis

_mktemp

<io.h>

_wmktemp

<io.h> ou <wchar.h>

Pour plus d'informations de 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 l' exemples d'appel de code non managé.

Voir aussi

Référence

Gestion de fichiers

le fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile