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