Freigeben über


_mktemp, _wmktemp

Erstellt einen eindeutigen Dateinamen. Sicherere Versionen dieser Funktionen sind verfügbar. Informationen dazu finden Sie unter _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

Parameter

  • template
    Dateinamenmuster.

Rückgabewert

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

Hinweise

Die Funktion _mktemp erstellt einen eindeutigen Dateinamen, indem das Argument template ändert. _mktemp behandelt automatisch Mehrbyte-Zeichenfolgen-Argumente entsprechend und derzeit erkennt Mehrbytezeichensequenzen entsprechend der Mehrbyte-Codepage vom Laufzeitsystem. _wmktemp ist eine Breitzeichenversion von _mktemp. Das Argument und der Rückgabewert von _wmktemp sind Zeichenfolgen mit Breitzeichen. _wmktemp und _mktemp identisch verhalten sich andernfalls, dass _wmktemp nicht behandelt Mehrbyte-Zeichenfolgen.

Zuordnung generischer Textroutinen

Tchar.h-Routine

_UNICODE und _MBCS nicht definiert

_MBCS definiert

_UNICODE definiert

_tmktemp

_mktemp

_mktemp

_wmktemp

Das Argument template hat die Form base XXXXXX, wobei base den Teil des neuen Dateinamen ist, den Sie bereitstellen und jedes X ist ein Platzhalter für ein Zeichen, das von _mktemp angegeben wird. Jedes Platzhalterzeichen in template muss einem Großbuchstaben X. sein. _mktemp verwaltet base bei und ersetzt das erste schleppende X durch ein alphabetisches Zeichen. _mktemp ersetzt folgenden nachfolgenden Xs durch einen fünfstelligen Wert; Dieser Wert ist eine eindeutige Zahl, die den aufrufenden Prozesses oder in Multithreadprogrammen, der aufrufende Thread gekennzeichnet.

Jeder erfolgreichen Aufruf von _mktemp ändert template. In jedem nachfolgenden Aufrufs vom selben Prozess oder der Thread mit demselben template-Argument, _mktemp Überprüfungen für Dateinamen, dass Abgleichungsnamen durch _mktemp in vorherigen Aufrufen zurückkehrten. Wenn keine Datei für einen angegebenen Namen vorhanden ist, die _mktemp zurückgibt, benennen. Wenn Dateien für alle vorher zurückgegebenen Namen vorhanden, erstellt _mktemp einen neuen Namen, indem das alphabetisches Zeichen, das er im zuvor zurückgegebenen Namen mit dem nächsten verfügbaren Kleinbuchstaben verwendete, in der Reihenfolge, von "a" bis "z". Wenn base ist:

fn

und der fünfstellige Wert, der von _mktemp angegeben wird, ist der zurückgegebene 12345, Vorname ist:

fna12345

Wenn dieser Name verwendet wird, um FNA12345 Datei erstellen und diese Datei vorhanden ist, ist der folgende Name, der in einem Aufruf aus den gleichen Prozess oder Thread mit gleichem base für template zurückgegeben wird:

fnb12345

Wenn FNA12345 nicht vorhanden ist, ist der zurückgegebene folgende Namen erneut:

fna12345

_mktemp kann maximal 26 eindeutige Dateinamen für eine bestimmte Kombination von Basis- und Vorlagenwerten erstellen. Daher ist FNZ12345 der letzte eindeutige Dateiname _mktemp kann für base erstellen und template beschränkt wird in diesem Beispiel.

Bei einem Fehler wird errno festgelegt. Wenn template ein ungültiges Format (beispielsweise, weniger als 6 Xs) aufweist, wird errno auf EINVAL festgelegt. Wenn _mktemp nicht möglich ist, einen eindeutigen Namen zu erstellen, da alle 26 möglichen Dateinamen bereits vorhanden sind, legt _mktemp Vorlage auf eine leere Zeichenfolge festgelegt und EEXIST zurückgegeben.

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 in der Einführung.

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

.NET Framework-Entsprechung

Nicht zutreffend. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Dateibehandlung

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile