_tempnam, _wtempnam, tmpnam, _wtmpnam

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Generar nombres que se pueden usar para crear archivos temporales. Existen versiones más seguras de algunas de estas funciones; consulte tmpnam_s, _wtmpnam_s.

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 que se va a anteponer a los nombres devueltos por _tempnam.

dir
Ruta de acceso que se usa en el nombre de archivo si no hay variable de entorno TMP, o si TMP no es un directorio válido.

str
Puntero que va a contener el nombre generado y será idéntico al devuelto por la función. Se trata de una manera cómoda de guardar el nombre generado.

Cada una de estas funciones devuelve un puntero al nombre generado o NULL si se produce un error. Error puede producirse si intenta más de TMP_MAX (consulte STDIO. (H) llamadas con tmpnam o si utiliza _tempnamy hay un nombre de directorio no válido especificado en la variable de entorno TMP y en el dir parámetro.

System_CAPS_ICON_note.jpg Nota

Los punteros devueltos por tmpnam y _wtmpnam seleccione búferes estáticos internos. libre no debe llamarse para desasignar los punteros. freedebe llamarse para punteros asignados por _tempnam y _wtempnam.

Cada una de estas funciones devuelve el nombre de un archivo que no existe. tmpnamDevuelve un nombre único en el directorio de trabajo actual y _tempnam permite generar un nombre único en un directorio distinto del actual. Tenga en cuenta que cuando un nombre de archivo es anteponer una barra diagonal inversa y sin información de ruta de acceso, como \fname21, esto indica que el nombre es válido para el directorio de trabajo actual.

Para tmpnam, puede almacenar este nombre de archivo generado en str. Si str es NULL, a continuación, tmpnam deja el resultado en un búfer interno estático. Por lo tanto, las subsiguientes llamadas destruirán este valor. El nombre generado por tmpnam consta de un nombre de archivo generado por el programa y, después de la primera llamada a tmpnam, una extensión de archivo de los números secuenciales de 32 base (.1-.vvu cuando TMP_MAX en STDIO. H es 32.767).

_tempnamgenerará 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 generará nombres de archivo únicos para el directorio especificado por TMP.

  • Si no se define la variable de entorno TMP, o si se establece en el nombre de un directorio que no existe, _tempnam utilizará el dir parámetro como la ruta de acceso para la que generará nombres únicos.

  • Si no se define la variable de entorno TMP o si se establece en el nombre de un directorio que no existe y si dir sea NULL o establecer el nombre de un directorio que no existe, _tempnam utilizará el directorio de trabajo actual para generar nombres únicos. Actualmente, si ambos TMP y dir especificar nombres de directorios que no existen, el _tempnam se producirá un error en la llamada de función.

El nombre devuelto por _tempnam será una concatenación de prefix y un número secuencial que se combina para crear un nombre de archivo único para el directorio especificado. _tempnamgenera nombres de archivo que no tienen ninguna extensión. _tempnamusa malloc para asignar espacio para el nombre de archivo; el programa es responsable de liberar este espacio cuando ya no es necesario.

_tempnamy tmpnam automáticamente obtienen los argumentos de cadena de caracteres multibyte de identificador según corresponda, reconociendo las secuencias de caracteres multibyte según la página de códigos OEM del sistema operativo. _wtempnames una versión con caracteres anchos de _tempnam; los argumentos y el valor devuelto de _wtempnam son cadenas de caracteres anchos. _wtempnamy _tempnam se comportan exactamente igual, 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. _wtmpnamy tmpnam se comportan exactamente igual, 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 rutina de texto genérico

Rutina TCHAR.H_UNICODE y _MBCS no definidos_MBCS definido_UNICODE definido
_ttmpnamtmpnamtmpnam_wtmpnam
_ttempnam_tempnam_tempnam_wtempnam
RutinaEncabezado necesario
_tempnam<stdio.h>
_wtempnam, _wtmpnam<stdio.h> o <wchar.h>
tmpnam<stdio.h>

Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.

// crt_tempnam.c  
// compile with: /W3  
// This program uses tmpnam to create a unique filename in the  
// current working directory, then uses _tempnam to create   
// a unique filename with a prefix of stq.   
  
#include <stdio.h>  
#include <stdlib.h>  
  
int main( void )  
{     
   char* name1 = NULL;  
   char* name2 = 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);  
  
}  

\s1gk. is safe to use as a temporary file.  
C:\DOCUME~1\user\LOCALS~1\Temp\2\stq2 is safe to use as a temporary file.  

No es aplicable. Para llamar a la función estándar de C, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.

E/S de secuencia
_getmbcp
malloc
_setmbcp
tmpfile
tmpfile_s

Mostrar: