_mktemp, _wmktemp
Crea un nombre único.Versiones más seguras de estas funciones están disponibles; 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 caracteres multibyte según corresponda, reconociendo secuencias de caracteres multibyte 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._wmktemp y _mktemp se comportan exactamente igual de otra forma, salvo que _wmktemp no controla las cadenas de caracteres multibyte.
Asignaciones de la rutina de texto genérico
rutina de Tchar.h |
_UNICODE y _MBCS no definido |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tmktemp |
_mktemp |
_mktemp |
_wmktemp |
El argumento de template tiene el formato base, 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 se invoque según el nuevo, garantiza que sus homólogos de estas funciones.Para obtener más información, vea Sobrecargas de plantilla de seguridad.
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, utilice PInvoke. Para obtener más información, vea La invocación de plataforma ejemplos.