_mktemp, _wmktemp

Erstellt einen eindeutigen Dateinamen. Sicherere Versionen dieser Funktionen sind verfügbar; siehe _mktemp_s, _wmktemp_s.

Syntax

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

Parameter

nameTemplate
Muster des Dateinamens.

Rückgabewert

Jede dieser Funktionen gibt einen Zeiger auf die geänderte nameTemplate zurück. Die Funktion gibt zurück NULL , wenn nameTemplate sie schlecht gebildet ist oder keine eindeutigen Namen aus der angegebenen nameTemplate erstellt werden können.

Hinweise

Die Funktion _mktemp vergibt einen eindeutigen Dateinamen, indem das Argument nameTemplate geändert wird. _mktemp behandelt Multibyte-Zeichenfolgenargumente automatisch richtig. Die Erkennung von Multibyte-Zeichenfolgen erfolgt auf Grundlage der vom Laufzeitsystem zum jeweiligen Zeitpunkt verwendeten Multibyte-Codeseite. _wmktemp ist eine Breitzeichenversion von _mktemp. Das Argument und der Rückgabewert von _wmktemp sind Zeichenfolgen mit Breitzeichen. _wmktemp und _mktemp verhalten sich identisch, mit der Ausnahme, dass _wmktemp multibyte-Zeichenfolgen nicht behandelt werden.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Generische Textroutinzuordnungen

Tchar.h-Routine _UNICODE und _MBCS nicht definiert _MBCS Definiert _UNICODE Definiert
_tmktemp _mktemp _mktemp _wmktemp

Das Argument nameTemplate hat das Format baseXXXXXX, wobei es sich bei base um den von Ihnen angegebenen Teil des neuen Dateinamens und bei den einzelnen X um Platzhalter für ein von _mktemp bereitgestelltes Zeichen handelt. Die einzelnen Platzhalterzeichen in nameTemplate müssen als X in Großschreibung angegeben sein. _mktemp behält base bei und ersetzt das erste nachgestellte X mit einem alphabetischen Zeichen. _mktemp Ersetzt die nachfolgenden X-Zeichen durch einen fünfstelligen Wert. Dieser Wert ist eine eindeutige Zahl, die den aufrufenden Prozess oder in Multithread-Programmen identifiziert, den aufrufenden Thread.

Bei jedem erfolgreichen Aufruf von _mktemp wird nameTemplate geändert. Bei jedem darauffolgenden Aufruf aus demselben Prozess oder Thread mit demselben Argument nameTemplate sucht _mktemp nach Dateinamen, die den von _mktemp im Rahmen vorheriger Aufrufe zurückgegebenen Namen entsprechen. Wenn für einen bestimmten Namen keine Datei vorhanden ist, gibt _mktemp diesen Namen zurück. Wenn für alle zuvor zurückgegebenen Namen Dateien vorhanden sind, erstellt _mktemp einen neuen Namen, indem das im zuvor zurückgegebenen Namen enthaltene alphabetische Zeichen durch den nächsten verfügbaren Kleinbuchstaben (in absteigender Reihenfolge von „a“ bis „z“) ersetzt wird. Ist base beispielsweise

fn

und der von _mktemp bereitgestellte fünfstellige Wert 12345, lautet der erste zurückgegebene Name:

fna12345

Wenn dieser Name verwendet wird, um die Datei FNA12345 zu erstellen, und diese Datei noch vorhanden ist, lautet der nächste bei einem Aufruf aus demselben Prozess oder Thread mit demselben base für nameTemplate zurückgegebene Name:

fnb12345

Wenn FNA12345 nicht vorhanden ist, wird der nächste zurückgegebene Name erneut angezeigt:

fna12345

_mktemp kann maximal 26 eindeutige Dateinamen für eine beliebige Kombination von base und nameTemplate Werten erstellen. Daher ist FNZ12345 der letzte eindeutige Dateiname, den _mktemp für die in diesem Beispiel verwendeten Werte für base und nameTemplate vergeben kann.

Bei Fehlern wird errno festgelegt. Wenn nameTemplate ein ungültiges Format vorhanden ist (z. B. weniger als sechs X Zeichen), errno wird auf EINVAL. Wenn _mktemp kein eindeutiger Name erstellt werden kann, da alle 26 möglichen Dateinamen bereits vorhanden sind, _mktemp wird nameTemplate auf eine leere Zeichenfolge festgelegt und zurückgegeben EEXIST.

In C++ haben diese Funktionen Vorlagenüberladungen, mit denen die neueren, sicheren Entsprechungen dieser Funktionen aufgerufen werden. Weitere Informationen finden Sie unter "Sichere Vorlagenüberladungen".

Anforderungen

Routine Erforderlicher Header
_mktemp <io.h>
_wmktemp <io.h> oder <wchar.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

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

Siehe auch

Dateiverarbeitung
fopen, _wfopen
_getmbcp
_getpid
_open, _wopen
_setmbcp
_tempnam, _wtempnam, tmpnam, _wtmpnam
tmpfile