_mktemp, _wmktemp

Erstellt einen eindeutigen Dateinamen.Sicherere Versionen dieser Funktionen sind verfügbar. Weitere Informationen 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 template ungültig ist oder nicht mehr eindeutige Namen aus der angegebenen Vorlage erstellt werden können.

Hinweise

Die _mktemp-Funktion erstellt einen eindeutigen Dateinamen, indem Sie das template-Argument ändert.Mehrbyte-Zeichenfolgen-Argumente und bei Bedarf automatisch behandelt_mktemp derzeit verwendeten erkennt Mehrbytezeichen sequenzen entsprechend der Mehrbyte-Codepage vom Laufzeitsystem._wmktemp ist eine Breitzeichen-Version von _mktemp. das Argument und der Rückgabewert von _wmktemp sind Zeichenfolgen mit Breitzeichen._wmktemp und _mktemp verhalten sich identisch, mit der Ausnahme, dass andernfalls _wmktemp Mehrbyte-Zeichenfolgen nicht behandelt.

Zuweisung generischer Textroutinen

Tchar.h-Routine

_UNICODE als auch _MBCS nicht definiert

_MBCS definieren

_UNICODE definiert

_tmktemp

_mktemp

_mktemp

_wmktemp

Das template-Argument hat das Formular base, wo base der Teil des neuen Dateinamens ist, den Sie bereitstellen und jedes X ist ein Platzhalter für ein Zeichen, das von _mktempangegeben wird.Jedes Platzhalterzeichen in template muss eine Großschreibung X sein._mktemp behält base bei und ersetzt die erste schleppende X durch ein alphabetisches Zeichen.Nachkommanullen folgenden ersetzt_mktemp Xs durch einen fünfstelligen Wert. Dieser Wert ist eine eindeutige Zahl, die den aufrufenden Prozesses oder Multithreading Programme und der aufrufende Thread identifiziert.

Jeder erfolgreichen Aufruf von_mktemp ändert template.In jedem nachfolgenden Aufruf von demselben Prozess oder Thread mit demselben template-Argument, _mktemp beachten, dass Dateinamen für Überprüfungen durch den Namen _mktemp in den vorhergehenden Aufrufen zurückgegebenen.Wenn keine Datei für einen angegebenen Namen vorhanden ist, gibt _mktemp diesen Namen zurück.Wenn Dateien für alle zuvor zurückgegebenen Namen vorhanden sind, erstellt einen neuen Namen _mktemp mithilfe des alphabetischen Zeichen, das er zuvor im zurückgegebenen Namen mit dem nächsten verfügbaren Kleinbuchstaben, und zwar in der Reihenfolge, von „a“ bis „z“ ersetzt.Wenn z. B. base ist:

fn

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

fna12345

Wenn dieser Name verwendet wird, um Datei FNA12345 zu erstellen und diese Datei noch vorhanden ist, ist der nächste Name, der für einen Aufruf vom gleichen Prozess oder Thread mit demselben base für template zurückgegeben wird:

fnb12345

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

fna12345

_mktemp kann maximal 26 eindeutigen Dateinamen für jede angegebene Kombination von Basis- und Vorlagen werten erstellt.Daher ist FNZ12345 der letzte eindeutige Dateinamen _mktemp kann für die base und template-Werte erstellen, die in diesem Beispiel verwendet werden.

Bei Fehler wird errno festgelegt.Wenn template ein ungültiges Format (beispielsweise weniger als 6 Xs) aufweist, wird errno zu EINVALfestgelegt.Wenn _mktemp nicht in der Lage ist, einen eindeutigen Namen zu erstellen, da alle 26 beliebigen Dateinamen bereits vorhanden sind, legt _mktemp Vorlage auf eine leere Zeichenfolge fest und gibt EEXISTzurück.

In C++ haben Überladungen Vorlagen, die diese Funktionen aufrufen, um das neueres, Entsprechungen dieser Funktionen.Weitere Informationen finden Sie unter Speichern Sie Vorlagen-Überladungen.

Anforderungen

Routine

Erforderlicher Header

_mktemp

<io.h>

_wmktemp

<io.h> oder <wchar.h>

Weitere Informationen finden Sie unter Kompatibilität 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. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.

Siehe auch

Referenz

Datei-Behandlung

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile