Compartir a través de


_mktemp, _wmktemp

Crea un nombre único. Hay disponibles versiones más seguras de estas funciones; vea _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
    Perfil de nombre.

Valor devuelto

Cada una de estas funciones devuelve un puntero a la plantilla modificada. La función devuelve NULL si template se forma mal o no más de nombres únicos se pueden crear de plantilla especificada.

Comentarios

La función de _mktemp crea un nombre de archivo único modificando el argumento de template . _mktemp controla automáticamente argumentos de cadena de multibyte- carácter según corresponda, reconociendo secuencias de multibyte- carácter según la página de códigos multibyte actualmente en uso por 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 exactamente igual de otra forma, salvo que _wmktemp no controla las cadenas de multibyte- carácter.

Asignaciones de rutina de texto genérico

Rutina Tchar.h

_UNICODE y _MBCS no definidos

_MBCS definido

_UNICODE definido

_tmktemp

_mktemp

_mktemp

_wmktemp

El argumento de template tiene el formato baseXXXXXX, donde es la parte base del nuevo nombre de archivo que proporciona y cada X es un marcador de posición para un carácter proporcionado por _mktemp. Cada carácter marcador en template debe ser mayúscula X. _mktemp conserva base y reemplaza el primer X que se arrastra por un carácter alfabético. _mktemp reemplaza X final siguiente con 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 de llamada.

Cada llamada correcta a _mktemp modifica template. En cada llamada subsiguiente del mismo proceso o subproceso con el mismo argumento de template , las comprobaciones de _mktemp los nombres de archivo que coinciden con los nombres devueltos por _mktemp en llamadas anteriores. Si ningún archivo existe para un nombre especificado, _mktemp devuelve ese nombre. Si los archivos existen para todos los nombres previamente devueltos, _mktemp crea un nuevo nombre reemplazando el carácter alfabético que utilizó en el nombre previamente devuelto a minúscula disponible siguiente, en orden, de “a” a la “z”. Por ejemplo, si es base :

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 todavía existe este archivo, el siguiente nombre devuelto en una llamada el mismo proceso o subproceso con el mismo base para template es:

fnb12345

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

fna12345

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

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

Requisitos

Rutina

Encabezado necesario

_mktemp

<io.h>

_wmktemp

<io.h o> wchar.h <>

Para obtener más información de compatibilidad, vea Compatibilidad en la Introducción.

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 );
      }
   }
}
  

Equivalente en .NET Framework

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.

Vea también

Referencia

Control de archivos

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile