Partager via


_mktemp_s, _wmktemp_s

Crée un nom de fichier unique.Ce sont des versions de _mktemp, _wmktemp avec des améliorations de sécurité comme décrit dans Fonctionnalités de sécurité du 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
    profil de nom.

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

Valeur de retour

Retour zéro de ces deux fonctions en cas de réussite ; code d'erreur en cas de échec.

conditions d'erreur

template

sizeInChars

valeur de retour

nouvelle valeur dans le modèle

NULL

quels

EINVAL

NULL

format incorrect (voir la section d' Remarks pour le format correct)

quels

EINVAL

chaîne vide

quels

Nombre d'<= x

EINVAL

chaîne vide

Si l'un des au-dessus de les conditions d'erreur se produit, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution de se poursuivre, errno est défini à EINVAL et les fonctions retourne EINVAL.

Notes

La fonction d' _mktemp_s crée un nom de fichier unique en modifiant l'argument d' template , afin qu'après l'appel, les points du pointeur d' template à une chaîne contenant le nouveau nom de fichier._mktemp_s 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_s est une version à caractère élargi d' _mktemp_s; l'argument d' _wmktemp_s est une chaîne à caractères larges._wmktemp_s et _mktemp_s se comportent de sinon, sauf qu' _wmktemp_s 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_s

_mktemp_s

_mktemp_s

_wmktemp_s

L'argument d' template a la forme, 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 majuscule X._mktemp_s conserve base et remplace le premier X de fin par une lettre._mktemp_s 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_s modifie template.Dans chaque appel suivant du même processus ou threads avec le même argument d' template , contrôles d' _mktemp_s pour les noms de fichiers que les noms de correspondance retournés par _mktemp_s dans les appels précédents.Si aucun fichier n'existe pour un nom, le retour d' _mktemp_s ce nom.Si les fichiers existent pour tous les noms précédemment retournés, _mktemp_s 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_s 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_s 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_s peut créer pour base et template a utilisé dans cet exemple.

En C++, à l'aide de ces fonctions est simplifié par des surcharges de modèle ; les surcharges peuvent également déduire la longueur de la mémoire tampon automatiquement (en éliminant le besoin de spécifier un argument de taille) et peuvent remplacer automatiquement des fonctions plus anciennes et non sécurisées par leurs nouvelles, sécurisées équivalents.Pour plus d'informations, consultez Surcharges sécurisées de modèle.

Configuration requise

routine

en-tête requis

_mktemp_s

<io.h>

_wmktemp_s

<io.h> ou <wchar.h>

Pour plus d'informations de compatibilité, consultez compatibilité dans l'introduction.

Exemple

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

Résultat de l'exemple

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

É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_s