This documentation is archived and is not being maintained.

_mktemp, _wmktemp

Create a unique filename.

char *_mktemp(
   char *template 
wchar_t *_wmktemp(
   wchar_t *template 


Filename pattern.

Return Value

Each of these functions returns a pointer to the modified template. The function returns NULL if template is badly formed or no more unique names can be created from the given template.


The _mktemp function creates a unique filename by modifying the template argument. _mktemp automatically handles multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the multibyte code page currently in use by the run-time system. _wmktemp is a wide-character version of _mktemp; the argument and return value of _wmktemp are wide-character strings. _wmktemp and _mktemp behave identically otherwise, except that _wmktemp does not handle multibyte-character strings.

Generic-Text Routine Mappings

TCHAR.H routine _UNICODE & _MBCS not defined _MBCS defined _UNICODE defined
_tmktemp _mktemp _mktemp _wmktemp

The template argument has the form baseXXXXXX where base is the part of the new filename that you supply and each X is a placeholder for a character supplied by _mktemp. Each placeholder character in template must be an uppercase X. _mktemp preserves base and replaces the first trailing X with an alphabetic character. _mktemp replaces the following trailing X's with a five-digit value; this value is a unique number identifying the calling process, or in multi-threaded programs, the calling thread.

Each successful call to _mktemp modifies template. In each subsequent call from the same process or thread with the same template argument, _mktemp checks for filenames that match names returned by _mktemp in previous calls. If no file exists for a given name, _mktemp returns that name. If files exist for all previously returned names, _mktemp creates a new name by replacing the alphabetic character it used in the previously returned name with the next available lowercase letter, in order, from 'a' through 'z'. For example, if base is


and the five-digit value supplied by _mktemp is 12345, the first name returned is


If this name is used to create file FNA12345 and this file still exists, the next name returned on a call from the same process or thread with the same base for template will be


If FNA12345 does not exist, the next name returned will again be


_mktemp can create a maximum of 27 unique filenames for any given combination of base and template values. Therefore, FNZ12345 is the last unique filename _mktemp can create for the base and template values used in this example.


Routine Required header Compatibility
_mktemp <io.h> Win 98, Win Me, Win NT, Win 2000, Win XP
_wmktemp <io.h> or <wchar.h> Win 98, Win Me, Win NT, Win 2000, Win XP

For additional compatibility information, see Compatibility in the Introduction.


All versions of the C run-time libraries.


// crt_mktemp.c
/* 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 *template = "fnXXXXXX";
char *result;
char names[5][9];

int main( void )
   int i;
   FILE *fp;

   for( i = 0; i < 5; i++ )
      strcpy( names[i], template );
      /* Attempt to find a unique filename: */
      result = _mktemp( names[i] );
      if( result == NULL )
         printf( "Problem creating the template" );
         if( (fp = fopen( result, "w" )) != NULL )
            printf( "Unique filename is %s\n", result );
            printf( "Cannot open %s\n", result );
         fclose( fp );

Sample Output

Unique filename is fna01552
Unique filename is fnb01552
Unique filename is fnc01552
Unique filename is fnd01552
Unique filename is fne01552

See Also

File Handling Routines | fopen | _getmbcp | _getpid | _open | _setmbcp | _tempnam | tmpfile | Run-Time Routines and .NET Framework Equivalents