_tempnam
, _wtempnam
, , tmpnam
, _wtmpnam
Genere nombres que se puedan usar para crear archivos temporales. Hay disponibles versiones más seguras de algunas de estas funciones; vea tmpnam_s
, _wtmpnam_s
.
Sintaxis
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
);
Parámetros
prefix
Cadena anteponeda a los nombres devueltos por _tempnam
.
dir
Ruta de acceso usada en el nombre de archivo si no hay ninguna variable de entorno TMP o si TMP no es un directorio válido.
str
Puntero que contiene el nombre generado, idéntico al nombre devuelto por la función. Es una manera cómoda de guardar el nombre generado.
Valor devuelto
Cada una de estas funciones devuelve un puntero al nombre generado o NULL
si se produce un error. Se puede producir un error si intenta más de TMP_MAX
(consulte STDIO. H) llama a con tmpnam
o si usa _tempnam
y hay un nombre de directorio no válido especificado en la TMP
variable de entorno y en el dir
parámetro .
Nota:
Los punteros devueltos por tmpnam
y _wtmpnam
apuntan a búferes estáticos internos. free
no se debe llamar a para desasignar esos punteros. Es necesario llamar a free
en el caso de los punteros asignados por _tempnam
y _wtempnam
.
Comentarios
Cada una de estas funciones devuelve el nombre de un archivo que no existe actualmente. tmpnam
devuelve un nombre único en el directorio temporal designado de Windows devuelto por GetTempPathW
. _tempnam
genera un nombre único en un directorio distinto del designado. Cuando se antepone un nombre de archivo con una barra diagonal inversa y no hay información de ruta de acceso, como \fname21
, indica que el nombre es válido para el directorio de trabajo actual.
En el caso de tmpnam
, puede almacenar este nombre de archivo generado en str
. Si str
es NULL
, tmpnam
deja el resultado en un búfer estático interno. Por lo tanto, las siguientes llamadas destruyen este valor. El nombre generado por tmpnam
consta de un nombre de archivo generado por el programa y, tras la primera llamada a tmpnam
, de una extensión de archivo de números secuenciales en base 32 (.1-.vvu cuando TMP_MAX
en STDIO.H es 32.767).
_tempnam
genera un nombre de archivo único para un directorio elegido por las reglas siguientes:
Si se define la variable de entorno TMP y se establece en un nombre de directorio válido, se generan nombres de archivo únicos para el directorio especificado por TMP.
Si la variable de entorno TMP no está definida o si se establece en el nombre de un directorio que no existe,
_tempnam
usa eldir
parámetro como la ruta de acceso para la que genera nombres únicos.Si la variable de entorno TMP no está definida o si está establecida en el nombre de un directorio que no existe, y si
dir
es oNULL
se establece en el nombre de un directorio que no existe,_tempnam
usa el directorio de trabajo actual para generar nombres únicos. Actualmente, si TMP ydir
especifican nombres de directorios que no existen, se produce un error en la llamada de función de _tempnam .
El nombre devuelto por _tempnam
es una concatenación de prefix
y un número secuencial, que se combinan para crear un nombre de archivo único para el directorio especificado. _tempnam
genera nombres de archivo sin extensión. _tempnam
usa malloc
para asignar espacio para el nombre de archivo; el programa es responsable de liberar este espacio cuando ya no es necesario.
_tempnam
y tmpnam
controlan automáticamente argumentos de cadena de caracteres multibyte como sea necesario, reconociendo las secuencias de caracteres multibyte en función de la página de códigos OEM obtenida del sistema operativo. _wtempnam
es una versión con caracteres anchos de _tempnam
; los argumentos y el valor devuelto de _wtempnam
son cadenas de caracteres anchos. _wtempnam
y _tempnam
se comportan de manera idéntica, salvo que _wtempnam
no controla las cadenas de caracteres multibyte. _wtmpnam
es una versión con caracteres anchos de tmpnam
; el argumento y el valor devuelto de _wtmpnam
son cadenas de caracteres anchos. _wtmpnam
y tmpnam
se comportan de manera idéntica, salvo que _wtmpnam
no controla las cadenas de caracteres multibyte.
Si _DEBUG
y _CRTDBG_MAP_ALLOC
se definen, _tempnam
y _wtempnam
se reemplazan por llamadas a _tempnam_dbg
y _wtempnam_dbg
.
Asignaciones de rutinas de texto genérico
Rutina TCHAR.H | _UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_ttmpnam |
tmpnam |
tmpnam |
_wtmpnam |
_ttempnam |
_tempnam |
_tempnam |
_wtempnam |
Requisitos
Routine | Encabezado necesario |
---|---|
_tempnam |
<stdio.h> |
_wtempnam , _wtmpnam |
<stdio.h> o <wchar.h> |
tmpnam |
<stdio.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
// 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'll 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.