Se recomienda usar Visual Studio 2017

_mktemp, _wmktemp

 

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

Crea un nombre de archivo único. Existen versiones más seguras de estas funciones; consulte _mktemp_s, _wmktemp_s.

char *_mktemp(  
   char *template   
);  
wchar_t *_wmktemp(  
   wchar_t *template   
);  
template <size_t size>  
char *_mktemp(  
   char (&template)[size]  
); // C++ only  
template <size_t size>  
wchar_t *_wmktemp(  
   wchar_t (&template)[size]  
); // C++ only  

Parámetros

template
Patrón de nombre de archivo.

Cada una de estas funciones devuelve un puntero a la plantilla modificada. La función devuelve NULL si template es incorrecta o no hay más nombres únicos se pueden crear desde la plantilla dada.

El _mktemp función crea un nombre de archivo único modificando el template argumento. _mktempadministra automáticamente los argumentos de cadena de caracteres multibyte según corresponda, reconociendo las secuencias de caracteres multibyte según la página de códigos multibyte actualmente en uso por el sistema de tiempo de ejecución. _wmktemp es una versión con caracteres anchos de _mktemp; el argumento y el valor devuelto de _wmktemp son cadenas de caracteres anchos. _wmktempy _mktemp se comportan exactamente igual, salvo que _wmktemp no controla las cadenas de caracteres multibyte.

Asignaciones de rutina de texto genérico

Rutina Tchar.h_UNICODE y _MBCS no definidos_MBCS definido_UNICODE definido
_tmktemp_mktemp_mktemp_wmktemp

El template argumento tiene la forma baseXXXXXX, donde base es la parte del nombre del archivo nuevo que proporciona y cada X es un marcador de posición de un carácter proporcionado por _mktemp. Cada carácter marcador de posición de template debe ser una x mayúscula. _mktemp conserva base y reemplaza la primera X final con un carácter alfabético. _mktempreemplaza los modificadores siguientes x con un valor de cinco dígitos; Este valor es un número único que identifica la llamada a proceso, o en programas multiproceso, el subproceso de llamada.

Cada llamada correcta a _mktemp modifica template. En cada llamada posterior realizada desde el mismo proceso o subproceso con el mismo template argumento, _mktemp busca los nombres de archivo que coinciden con los nombres devueltos por _mktemp en llamadas anteriores. Si no existe ningún archivo para un nombre concreto, _mktemp devuelve ese nombre. Si existen archivos de todos los previamente devuelven nombres, _mktemp crea un nuevo nombre sustituyendo el carácter alfabético que utiliza en el nombre devuelto previamente con la siguiente letra minúscula disponible, en orden, de la 'a' a la 'z'. Por ejemplo, si base es:

fn  

y el valor de cinco dígitos proporcionado por _mktemp es 12345, el nombre devuelto es:

fna12345  

Si este nombre se utiliza para crear el archivo FNA12345 y el archivo todavía existe, el siguiente nombre devuelto en una llamada desde el mismo proceso o subproceso con el mismo base de template es:

fnb12345  

Si FNA12345 no existe, el siguiente nombre devuelto es nuevo:

fna12345  

_mktemppuede crear un máximo de 26 nombres de archivo únicos para cualquier combinación de valores de base y la plantilla. Por lo tanto, FNZ12345 es el último nombre de archivo único _mktemp puede crear para la base y template valores utilizados en este ejemplo.

En caso de error, errno se establece. Si template tiene un formato no válido (por ejemplo, menos de 6 x), errno está establecido en EINVAL. Si _mktemp no puede crear un nombre único porque ya existen todos los nombres de archivo posibles 26, _mktemp establece la plantilla en una cadena vacía y devuelve EEXIST.

En C++, estas funciones tienen sobrecargas de plantilla que invocan los homólogos seguros más recientes de estas funciones. Para obtener más información, consulta Secure Template Overloads.

RutinaEncabezado necesario
_mktemp<io.h>
_wmktemp<io.h> o <wchar.h>

Para obtener más información sobre compatibilidad, vea Compatibility en la introducción.

// crt_mktemp.c  
// compile with: /W3  
/* The program uses _mktemp to create  
 * unique filenames. It opens each filename  
 * to ensure that the next name is unique.  
 */  
  
#include <io.h>  
#include <string.h>  
#include <stdio.h>  
#include <errno.h>  
  
char *template = "fnXXXXXX";  
char *result;  
char names[27][9];  
  
int main( void )  
{  
   int i;  
   FILE *fp;  
  
   for( i = 0; i < 27; i++ )  
   {  
      strcpy_s( names[i], sizeof( names[i] ), template );  
      /* Attempt to find a unique filename: */  
      result = _mktemp( names[i] );  // C4996  
      // Note: _mktemp is deprecated; consider using _mktemp_s instead  
      if( result == NULL )  
      {  
         printf( "Problem creating the template\n" );  
         if (errno == EINVAL)  
         {  
             printf( "Bad parameter\n");  
         }  
         else if (errno == EEXIST)  
         {  
             printf( "Out of unique filenames\n");   
         }  
      }  
      else  
      {  
         fopen_s( &fp, result, "w" );  
         if( fp != NULL )  
            printf( "Unique filename is %s\n", result );  
         else  
            printf( "Cannot open %s\n", result );  
         fclose( fp );  
      }  
   }  
}  

Unique filename is fna03912  
Unique filename is fnb03912  
Unique filename is fnc03912  
Unique filename is fnd03912  
Unique filename is fne03912  
Unique filename is fnf03912  
Unique filename is fng03912  
Unique filename is fnh03912  
Unique filename is fni03912  
Unique filename is fnj03912  
Unique filename is fnk03912  
Unique filename is fnl03912  
Unique filename is fnm03912  
Unique filename is fnn03912  
Unique filename is fno03912  
Unique filename is fnp03912  
Unique filename is fnq03912  
Unique filename is fnr03912  
Unique filename is fns03912  
Unique filename is fnt03912  
Unique filename is fnu03912  
Unique filename is fnv03912  
Unique filename is fnw03912  
Unique filename is fnx03912  
Unique filename is fny03912  
Unique filename is fnz03912  
Problem creating the template.  
Out of unique filenames.  

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.

Control de archivos
fopen, _wfopen
_getmbcp
_getpid
_open, _wopen
_setmbcp
_tempnam, _wtempnam, tmpnam, _wtmpnam
tmpfile

Mostrar: