_mktemp_s, _wmktemp_s

 

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

Crée un nom de fichier unique. Voici les versions de _mktemp, _wmktemp avec des améliorations de sécurité comme décrit dans fonctionnalités de sécurité de la bibliothèque CRT.

errno_t _mktemp_s(  
   char *template,  
   size_t sizeInChars  
);  
errno_t _wmktemp_s(  
   wchar_t *template,  
   size_t sizeInChars  
);  
template <size_t size>  
errno_t _mktemp_s(  
   char (&template)[size]  
); // C++ only  
template <size_t size>  
errno_t _wmktemp_s(  
   wchar_t (&template)[size]  
); // C++ only  

Paramètres

template
Modèle de nom de fichier.

sizeInChars
Taille de la mémoire tampon de caractères codés dans _mktemp_s; large caractères _wmktemp_s, y compris le terminateur null.

Les deux de ces fonctions retournent zéro en cas de réussite ; un code d’erreur en cas d’échec.

Conditions d’erreur

templatesizeInCharsvaleur de retournouvelle valeur dans le modèle
NULLanyEINVALNULL
Format incorrect (voir Remarks section pour le format correct)anyEINVALchaîne vide
any<= number of X's number="" of=""></= number of X's>EINVALchaîne vide

Si une des conditions d’erreur ci-dessus se produit, le Gestionnaire de paramètre non valide est appelé, comme décrit dans Validation de paramètre. Si l’exécution est autorisée à se poursuivre, errno a EINVAL et retourne les fonctions EINVAL.

Le _mktemp_s fonction crée un nom de fichier unique en modifiant le template argument, afin qu’après l’appel, le template pointeur pointe vers une chaîne qui contient le nouveau nom de fichier. _mktemp_s 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_sest une version à caractère élargi de _mktemp_s; l’argument de _wmktemp_s est une chaîne à caractères larges. _wmktemp_s et _mktemp_s se comportent de la même manière, sauf que _wmktemp_s 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_s_mktemp_s_mktemp_s_wmktemp_s

Le template argument est la baseXXXXXX, 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_s. Chaque caractère d’espace réservé dans template doit être un x majuscule _mktemp_s conserve base et remplace le premier X de fin par un caractère alphabétique. _mktemp_s 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_s modifie template. Dans chaque appel suivant du même processus ou thread avec le même argument template, _mktemp_s recherche des noms de fichier qui correspondent aux noms retournés par _mktemp_s dans les appels précédents. Si aucun fichier n'existe pour le nom spécifié, _mktemp_s retourne ce nom. Si des fichiers existent pour tous les noms précédemment retournés, _mktemp_s 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_s 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_s 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_s peut créer pour les valeurs base et template utilisées dans cet exemple.

En C++, l’utilisation de ces fonctions est simplifiée par les surcharges de modèle ; les surcharges peuvent déduire la longueur de la mémoire tampon automatiquement (ce qui évite d’avoir à spécifier un argument taille) et peuvent remplacer automatiquement les fonctions plus anciennes et non sécurisées par leurs équivalentes plus récentes et sécurisées. Pour plus d'informations, consultez Secure Template Overloads.

RoutineEn-tête requis
_mktemp_s<io.h>
_wmktemp_s<io.h> ou <wchar.h>

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

// crt_mktemp_s.cpp  
/* The program uses _mktemp to create  
 * five unique filenames. It opens each filename  
 * to ensure that the next name is unique.  
 */  
  
#include <io.h>  
#include <string.h>  
#include <stdio.h>  
  
char *fnTemplate = "fnXXXXXX";  
char names[5][9];  
  
int main()  
{  
   int i, err, sizeInChars;  
   FILE *fp;  
  
   for( i = 0; i < 5; i++ )  
   {  
      strcpy_s( names[i], sizeof(names[i]), fnTemplate );  
      /* Get the size of the string and add one for the null terminator.*/  
      sizeInChars = strnlen(names[i], 9) + 1;  
      /* Attempt to find a unique filename: */  
      err = _mktemp_s( names[i], sizeInChars );  
      if( err != 0 )  
         printf( "Problem creating the template" );  
      else  
      {  
         if( fopen_s( &fp, names[i], "w" ) == 0 )  
            printf( "Unique filename is %s\n", names[i] );  
         else  
            printf( "Cannot open %s\n", names[i] );  
         fclose( fp );  
      }  
   }  
  
   return 0;  
}  

Unique filename is fna03188  
Unique filename is fnb03188  
Unique filename is fnc03188  
Unique filename is fnd03188  
Unique filename is fne03188  

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_s

Afficher: