_tempnam, _wtempnam, tmpnam, _wtmpnam_tempnam, _wtempnam, tmpnam, _wtmpnam

Génèrent des noms que vous pouvez utiliser pour créer des fichiers temporaires.Generate names you can use to create temporary files. Il existe des versions plus sécurisées de ces fonctions. Consultez tmpnam_s, _wtmpnam_s.More secure versions of some of these functions are available; see tmpnam_s, _wtmpnam_s.

SyntaxeSyntax

char *_tempnam(
   const char *dir,
   const char *prefix
);
wchar_t *_wtempnam(
   const wchar_t *dir,
   const wchar_t *prefix
);
char *tmpnam(
   char *str
);
wchar_t *_wtmpnam(
   wchar_t *str
);

ParamètresParameters

prefixprefix
Chaîne qui sera précédée des noms retournés par _tempnam.The string that will be pre-pended to names returned by _tempnam.

dirdir
Chemin d’accès utilisé dans le nom de fichier en l’absence de variable d’environnement TMP ou si TMP n’est pas un répertoire valide.The path used in the file name if there is no TMP environment variable, or if TMP is not a valid directory.

strstr
Pointeur destiné à contenir le nom généré et qui sera identique à celui retourné par la fonction.Pointer that will hold the generated name and will be identical to the name returned by the function. Il s’agit d’un moyen pratique d’enregistrer le nom généré.This is a convenient way to save the generated name.

Valeur de retourReturn Value

Chacune de ces fonctions retourne un pointeur vers le nom généré ou null en cas d’échec.Each of these functions returns a pointer to the name generated or NULL if there is a failure. Une défaillance peut se produire si vous tentez plus de TMP_MAX (voir stdio. H) appelle avec tmpnam ou si vous utilisez _tempnam et qu’un nom de répertoire non valide est spécifié dans la variable d’environnement TMP et dans le paramètre dir .Failure can occur if you attempt more than TMP_MAX (see STDIO.H) calls with tmpnam or if you use _tempnam and there is an invalid directory name specified in the TMP environment variable and in the dir parameter.

Notes

Les pointeurs retournés par tmpnam et _wtmpnam pointent vers des mémoires tampon statiques internes.The pointers returned by tmpnam and _wtmpnam point to internal static buffers. free ne doit pas être appelé pour libérer ces pointeurs.free should not be called to deallocate those pointers. Free doit être appelé pour les pointeurs alloués par _tempnam et _wtempnam.free needs to be called for pointers allocated by _tempnam and _wtempnam.

NotesRemarks

Chacune de ces fonctions retourne le nom d’un fichier qui n’existe pas actuellement.Each of these functions returns the name of a file that does not currently exist. tmpnam retourne un nom unique dans le répertoire temporaire Windows désigné renvoyé par GetTempPathW.tmpnam returns a name that's unique in the designated Windows temporary directory returned by GetTempPathW. tempnam génère un nom unique dans un répertoire autre que celui désigné. __tempnam generates a unique name in a directory other than the designated one. Notez que lorsqu’un nom de fichier est précédé d’une barre oblique inverse et d’aucune information de chemin, comme \fname21, cela indique que le nom est valide pour le répertoire de travail actif.Note than when a file name is pre-pended with a backslash and no path information, such as \fname21, this indicates that the name is valid for the current working directory.

Pour tmpnam, vous pouvez stocker ce nom de fichier généré dans Str.For tmpnam, you can store this generated file name in str. Si Str a la valeur null, tmpnam laisse le résultat dans une mémoire tampon statique interne.If str is NULL, then tmpnam leaves the result in an internal static buffer. Par conséquent, tous les appels suivants détruisent cette valeur.Thus any subsequent calls destroy this value. Le nom généré par tmpnam se compose d’un nom de fichier généré par le programme et, après le premier appel à tmpnam, une extension de fichier de nombres séquentiels dans la base 32 (. 1-4. vvu, quand TMP_MAX dans stdio. H est 32 767).The name generated by tmpnam consists of a program-generated file name and, after the first call to tmpnam, a file extension of sequential numbers in base 32 (.1-.vvu, when TMP_MAX in STDIO.H is 32,767).

_tempnam génère un nom de fichier unique pour un répertoire choisi par les règles suivantes :_tempnam will generate a unique file name for a directory chosen by the following rules:

  • Si la variable d’environnement TMP est définie avec un nom de répertoire valide, des noms de fichiers uniques sont générés pour le répertoire spécifié par TMP.If the TMP environment variable is defined and set to a valid directory name, unique file names will be generated for the directory specified by TMP.

  • Si la variable d’environnement TMP n’est pas définie ou si elle est définie sur le nom d’un répertoire qui n’existe pas, _tempnam utilise le paramètre dir comme chemin d’accès pour lequel elle génère des noms uniques.If the TMP environment variable is not defined or if it is set to the name of a directory that does not exist, _tempnam will use the dir parameter as the path for which it will generate unique names.

  • Si la variable d’environnement TMP n’est pas définie ou si elle est définie sur le nom d’un répertoire qui n’existe pas, et si dir a la valeur null ou est défini sur le nom d’un répertoire qui n’existe pas, _tempnam utilise le répertoire de travail actuel dans le gène Évaluez les noms uniques.If the TMP environment variable is not defined or if it is set to the name of a directory that does not exist, and if dir is either NULL or set to the name of a directory that does not exist, _tempnam will use the current working directory to generate unique names. Actuellement, si TMP et dir spécifient tous deux des noms de répertoires qui n’existent pas, l’appel de la fonction _tempnam échoue.Currently, if both TMP and dir specify names of directories that do not exist, the _tempnam function call will fail.

Le nom retourné par _tempnam sera une concaténation de préfixe et un nombre séquentiel, qui sera combiné pour créer un nom de fichier unique pour le répertoire spécifié.The name returned by _tempnam will be a concatenation of prefix and a sequential number, which will combine to create a unique file name for the specified directory. _tempnam génère des noms de fichiers qui n’ont pas d’extension._tempnam generates file names that have no extension. _tempnam utilise malloc pour allouer de l’espace pour le nom de fichier ; le programme est chargé de libérer cet espace lorsqu’il n’est plus nécessaire._tempnam uses malloc to allocate space for the filename; the program is responsible for freeing this space when it is no longer needed.

_tempnam et tmpnam gèrent automatiquement les arguments de chaîne de caractères multioctets comme il convient, en identifiant les séquences de caractères multioctets en fonction de la page de codes OEM obtenue du système d’exploitation._tempnam and tmpnam automatically handle multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the OEM code page obtained from the operating system. _wtempnam est une version à caractères larges de _tempnam; les arguments et la valeur de retour de _wtempnam sont des chaînes à caractères larges._wtempnam is a wide-character version of _tempnam; the arguments and return value of _wtempnam are wide-character strings. _wtempnam et _tempnam se comportent de la même manière, sauf que _wtempnam ne gère pas les chaînes de caractères multioctets._wtempnam and _tempnam behave identically except that _wtempnam does not handle multibyte-character strings. _wtmpnam est une version à caractères larges de tmpnam; l’argument et la valeur de retour de _wtmpnam sont des chaînes à caractères larges._wtmpnam is a wide-character version of tmpnam; the argument and return value of _wtmpnam are wide-character strings. _wtmpnam et tmpnam se comportent de la même manière, sauf que _wtmpnam ne gère pas les chaînes de caractères multioctets._wtmpnam and tmpnam behave identically except that _wtmpnam does not handle multibyte-character strings.

Si _ Debug et _ CRTDBG_MAP_ALLOC sont définis, _tempnam et _wtempnam sont remplacés par les appels à _tempnam_dbg et _wtempnam_dbg.If _DEBUG and _CRTDBG_MAP_ALLOC are defined, _tempnam and _wtempnam are replaced by calls to _tempnam_dbg and _wtempnam_dbg.

Mappages de routines de texte génériqueGeneric-Text Routine Mappings

Routine TCHAR.HTCHAR.H routine _UNICODE et _MBCS non définis_UNICODE & _MBCS not defined _MBCS défini_MBCS defined _UNICODE défini_UNICODE defined
_ttmpnam_ttmpnam tmpnamtmpnam tmpnamtmpnam _wtmpnam_wtmpnam
_ttempnam_ttempnam _tempnam_tempnam _tempnam_tempnam _wtempnam_wtempnam

Configuration requiseRequirements

RoutineRoutine En-tête requisRequired header
_tempnam_tempnam <stdio.h><stdio.h>
_wtempnam, _wtmpnam_wtempnam, _wtmpnam <stdio.h> ou <wchar.h><stdio.h> or <wchar.h>
tmpnamtmpnam <stdio.h><stdio.h>

Pour plus d’informations sur la compatibilité, voir consultez Compatibilité.For additional compatibility information, see Compatibility.

ExempleExample

// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// temporary directory, and _tempname to create a unique filename
// in C:\\tmp.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char * name1 = NULL;
   char * name2 = NULL;
   char * name3 = NULL;

   // Create a temporary filename for the current working directory:
   if ((name1 = tmpnam(NULL)) != NULL) { // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf("%s is safe to use as a temporary file.\n", name1);
   } else {
      printf("Cannot create a unique filename\n");
   }

   // Create a temporary filename in temporary directory with the
   // prefix "stq". The actual destination directory may vary
   // depending on the state of the TMP environment variable and
   // the global variable P_tmpdir.

   if ((name2 = _tempnam("c:\\tmp", "stq")) != NULL) {
      printf("%s is safe to use as a temporary file.\n", name2);
   } else {
      printf("Cannot create a unique filename\n");
   }

   // When name2 is no longer needed:
   if (name2) {
      free(name2);
   }

   // Unset TMP environment variable, then create a temporary filename in C:\tmp.
   if (_putenv("TMP=") != 0) {
      printf("Could not remove TMP environment variable.\n");
   }

   // With TMP unset, we will use C:\tmp as the temporary directory.
   // Create a temporary filename in C:\tmp with prefix "stq".
   if ((name3 = _tempnam("c:\\tmp", "stq")) != NULL) {
      printf("%s is safe to use as a temporary file.\n", name3);
   }
   else {
      printf("Cannot create a unique filename\n");
   }

   // When name3 is no longer needed:
   if (name3) {
      free(name3);
   }

   return 0;
}
C:\Users\LocalUser\AppData\Local\Temp\sriw.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\stq2 is safe to use as a temporary file.
c:\tmp\stq3 is safe to use as a temporary file.

Voir aussiSee also

E/S de fluxStream I/O
_getmbcp_getmbcp
mallocmalloc
_setmbcp_setmbcp
tmpfiletmpfile
tmpfile_stmpfile_s