_mktemp_s, _wmktemp_s

 

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. Estas son versiones de _mktemp, _wmktemp con mejoras de seguridad, como se describe en características de seguridad de CRT.

errno_t _mktemp_s(  
   char *template,  
   size_t sizeInChars  
);  
errno_t _wmktemp_s(  
   wchar_t *template,  
   size_t sizeInChars  
);  
template <size_t size>  
errno_t _mktemp_s(  
   char (&template)[size]  
); // C++ only  
template <size_t size>  
errno_t _wmktemp_s(  
   wchar_t (&template)[size]  
); // C++ only  

Parámetros

template
Patrón de nombre de archivo.

sizeInChars
Tamaño del búfer en caracteres de byte único en _mktemp_s; amplia caracteres en _wmktemp_s, incluido el terminador null.

Ambas funciones devuelven cero en caso de éxito; código de error en caso de error.

Condiciones de error

templatesizeInCharsvalor devueltonuevo valor en la plantilla
NULLcualquieraEINVALNULL
Formato incorrecto (consulte Remarks sección de formato correcto)cualquieraEINVALcadena vacía
any<= number of X's number="" of=""></= number of X's>EINVALcadena vacía

Si ocurre alguna de las condiciones de error anterior, se invoca el controlador de parámetros no válidos, como se describe en validación del parámetro. Si la ejecución puede continuar, errno está establecido en EINVAL y devuelve las funciones EINVAL.

El _mktemp_s función crea un nombre de archivo único mediante la modificación de la template argumento, por lo que después de la llamada, el template puntero apunta a una cadena que contiene el nuevo nombre de archivo. _mktemp_sadministra 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_ses una versión con caracteres anchos de _mktemp_s; el argumento de _wmktemp_s es una cadena de caracteres anchos. _wmktemp_sy _mktemp_s se comportan exactamente igual, salvo que _wmktemp_s 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_s_mktemp_s_mktemp_s_wmktemp_s

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_s. Cada carácter marcador de posición de template debe ser una x mayúscula. _mktemp_s conserva base y reemplaza la primera X final con un carácter alfabético. _mktemp_sreemplaza 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_s modifica template. En cada llamada posterior realizada desde el mismo proceso o subproceso con el mismo template argumento, _mktemp_s busca los nombres de archivo que coinciden con los nombres devueltos por _mktemp_s en llamadas anteriores. Si no existe ningún archivo para un nombre concreto, _mktemp_s devuelve ese nombre. Si existen archivos de todos los previamente devuelven nombres, _mktemp_s 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_s 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  

_mktemp_spuede 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_s puede crear para la base y template valores utilizados en este ejemplo.

En C++, el uso de estas funciones se simplifica con las sobrecargas de plantilla; las sobrecargas pueden realizar una inferencia automáticamente de la longitud de búfer (lo que elimina el requisito de especificar un argumento de tamaño) y pueden reemplazar automáticamente funciones anteriores no seguras con sus homólogos seguros más recientes. Para obtener más información, consulta Secure Template Overloads.

RutinaEncabezado necesario
_mktemp_s<io.h>
_wmktemp_s<io.h> o <wchar.h>

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

// crt_mktemp_s.cpp  
/* The program uses _mktemp to create  
 * five unique filenames. It opens each filename  
 * to ensure that the next name is unique.  
 */  
  
#include <io.h>  
#include <string.h>  
#include <stdio.h>  
  
char *fnTemplate = "fnXXXXXX";  
char names[5][9];  
  
int main()  
{  
   int i, err, sizeInChars;  
   FILE *fp;  
  
   for( i = 0; i < 5; i++ )  
   {  
      strcpy_s( names[i], sizeof(names[i]), fnTemplate );  
      /* Get the size of the string and add one for the null terminator.*/  
      sizeInChars = strnlen(names[i], 9) + 1;  
      /* Attempt to find a unique filename: */  
      err = _mktemp_s( names[i], sizeInChars );  
      if( err != 0 )  
         printf( "Problem creating the template" );  
      else  
      {  
         if( fopen_s( &fp, names[i], "w" ) == 0 )  
            printf( "Unique filename is %s\n", names[i] );  
         else  
            printf( "Cannot open %s\n", names[i] );  
         fclose( fp );  
      }  
   }  
  
   return 0;  
}  

Unique filename is fna03188  
Unique filename is fnb03188  
Unique filename is fnc03188  
Unique filename is fnd03188  
Unique filename is fne03188  

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_s

Mostrar: