_mktemp_s, _wmktemp_s
Crée un nom de fichier unique. Il s'agit de versions de _mktemp, _wmktemp avec des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité dans le 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
Motif de nom de fichier.sizeInChars
Taille de la mémoire tampon en caractères codés sur un octet dans _mktemp_s; caractères larges dans _wmktemp_s, notamment la marque de fin null.
Valeur de retour
Ces deux fonctions retournent zéro en cas de réussite ; un code d'erreur en cas d'échec.
Conditions d'erreur
template |
sizeInChars |
valeur de retour |
nouvelle valeur du modèle |
---|---|---|---|
NULL |
any |
EINVAL |
NULL |
Format incorrect (voir la section Remarks pour un format correct) |
any |
EINVAL |
Chaîne vide |
any |
<= nombre de X |
EINVAL |
Chaîne vide |
Si l'une de ces 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 est défini à la valeur EINVAL et ces fonctions retournent EINVAL.
Notes
La fonction _mktemp_s crée un seul nom de fichier en modifiant l'argument template, afin qu'après l'appel, le pointeur template pointe vers une chaîne qui contient le nouveau nom de fichier. _mktemp_s 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_s est une version à caractères larges 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 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_s |
_mktemp_s |
_mktemp_s |
_wmktemp_s |
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_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 une lettre de l'alphabet. _mktemp_s 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_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 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_s 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_s 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_s peut créer pour base et les valeurs 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 Sécuriser les surcharges 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 sur la 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 Exemples d'appel de plateforme.