_mktemp, _wmktemp

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

Sintaxis

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

Parámetros

nameTemplate
Patrón de nombre de archivo.

Valor devuelto

Cada una de estas funciones devuelve un puntero al elemento nameTemplate modificado. La función devuelve NULL si nameTemplate tiene un formato incorrecto o no se pueden crear más nombres únicos a partir del nombre especificadoTemplate.

Comentarios

La función _mktemp crea un nombre de archivo único modificando el argumento nameTemplate. _mktemp controla automáticamente los argumentos de cadenas de caracteres multibyte según corresponda, reconociendo las secuencias de caracteres multibyte según la página de códigos multibyte que usa actualmente el sistema en 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. _wmktemp y _mktemp se comportan de forma idéntica, salvo que _wmktemp no controla las cadenas de caracteres multibyte.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Asignaciones de rutinas de texto genérico

Rutina Tchar.h _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_tmktemp _mktemp _mktemp _wmktemp

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

Cada llamada correcta a _mktemp modifica nameTemplate. En cada llamada posterior realizada desde el mismo proceso o subproceso con el mismo argumento nameTemplate, _mktemp busca nombres de archivo que coincidan con los nombres devueltos por _mktemp en las llamadas anteriores. Si no existe ningún archivo para un nombre concreto, _mktemp devuelve dicho nombre. Si existen archivos de todos los nombres devueltos previamente, _mktemp crea un nombre nuevo sustituyendo el carácter alfabético que emplea en el nombre devuelto anteriormente por 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 primer nombre devuelto es:

fna12345

Si este nombre se usa 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 para nameTemplate es:

fnb12345

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

fna12345

_mktemp puede crear un máximo de 26 nombres de archivo únicos para cualquier combinación determinada de base valores y nameTemplate . Por lo tanto, FNZ12345 es el último nombre de archivo único que _mktemp puede crear para los valores base y nameTemplate usados en este ejemplo.

En caso de error, se establece errno. Si nameTemplate tiene un formato no válido (por ejemplo, menos de seis caracteres X), errno se establece en EINVAL. Si _mktemp no puede crear un nombre único porque ya existen los 26 nombres de archivo posibles, _mktemp establece nameTemplate 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, consulte Sobrecargas de plantillas seguras.

Requisitos

Routine Encabezado necesario
_mktemp <io.h>
_wmktemp <io.h> o <wchar.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

// 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.

Consulte también

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