Freigeben über


_mktemp_s, _wmktemp_s

Erstellt einen eindeutigen Dateinamen. Diese Versionen von _mktemp, _wmktemp enthalten Sicherheitserweiterungen wie unter Sicherheitsfunktionen in der CRT beschrieben.

errno_t _mktemp_s(
   char *template,
   size_t sizeInChars
);
errno_t _wmktemp_s(
   wchar_t *template,
   size_t sizeInChars
);
template <size_t size>
errno_t _mktemp_s(
   char (&template)[size]
); // C++ only
template <size_t size>
errno_t _wmktemp_s(
   wchar_t (&template)[size]
); // C++ only

Parameter

  • template
    Dateinamenmuster.

  • sizeInChars
    Größe des Puffers in den Einzelbytezeichen in _mktemp_s; Breitzeichen in _wmktemp_s, einschließlich das NULL-Zeichen.

Rückgabewert

NULL zurückgeben beider Funktionen bei Erfolg; ein Fehlercode auf Fehler.

Fehlerbedingungen

template

sizeInChars

Rückgabewert

neuen Wert in der Vorlage

NULL

any

EINVAL

NULL

Falsches Format (siehe Remarks-Abschnitt zur ordnungsgemäßen Format)

any

EINVAL

leere Zeichenfolge

any

<= Zahl von X

EINVAL

leere Zeichenfolge

Wenn eine der oben genannten Fehlerzustände, tritt der ungültige Parameterhandler wird aufgerufen, wie in Parametervalidierung beschrieben. Wenn die Ausführung zulässig ist, um fortzufahren, wird errno auf EINVAL festgelegt und die Funktionen gibt EINVAL zurück.

Hinweise

Die Funktion _mktemp_s erstellt einen eindeutigen Dateinamen, indem das Argument template, sodass ändert, nachdem der Aufruf, der template Zeiger auf eine Zeichenfolge zeigt, die den neuen Dateinamen enthält. _mktemp_s behandelt automatisch Mehrbyte-Zeichenfolgen-Argumente entsprechend und derzeit erkennt Mehrbytezeichensequenzen entsprechend der Mehrbyte-Codepage vom Laufzeitsystem. _wmktemp_s ist eine Breitzeichen-Version von _mktemp_s; das Argument von _wmktemp_s ist eine Zeichenfolge mit Breitzeichen. _wmktemp_s und _mktemp_s identisch verhalten sich andernfalls, dass _wmktemp_s nicht behandelt Mehrbyte-Zeichenfolgen.

Zuordnung generischer Textroutinen

Tchar.h-Routine

_UNICODE und _MBCS nicht definiert

_MBCS definiert

_UNICODE definiert

_tmktemp_s

_mktemp_s

_mktemp_s

_wmktemp_s

Das Argument template hat die Form baseXXXXXX, wobei base der Teil des neuen Dateinamen ist, den Sie bereitstellen und jedes X ist ein Platzhalter für ein Zeichen, das von _mktemp_s angegeben wird. Jedes Platzhalterzeichen in template muss einem Großbuchstaben X. sein. _mktemp_s verwaltet base bei und ersetzt das erste schleppende X durch ein alphabetisches Zeichen. _mktemp_s 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_s ändert template. In jedem nachfolgenden Aufrufs vom selben Prozess oder der Thread mit demselben template-Argument, _mktemp_s Überprüfungen für Dateinamen, dass Abgleichungsnamen durch _mktemp_s in vorherigen Aufrufen zurückkehrten. Wenn keine Datei für einen angegebenen Namen vorhanden ist, die _mktemp_s zurückgibt, benennen. Wenn Dateien für alle vorher zurückgegebenen Namen vorhanden, erstellt _mktemp_s 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_s 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_s kann maximal 26 eindeutige Dateinamen für eine bestimmte Kombination von Basis- und Vorlagenwerten erstellen. Daher ist FNZ12345 der letzte eindeutige Dateiname _mktemp_s kann für base erstellen und template beschränkt wird in diesem Beispiel.

In C++ wird die Verwendung dieser Funktionen durch Vorlagenüberladungen vereinfacht; die Überladungen können automatisch Rückschlüsse auf die Pufferlänge ziehen (wodurch kein Größenargument mehr angegeben werden muss), und sie können automatisch die älteren, nicht sicheren Funktionen durch ihre neueren, sicheren Entsprechungen ersetzen. Weitere Informationen finden Sie unter Sichere Vorlagenüberladungen.

Anforderungen

Routine

Erforderlicher Header

_mktemp_s

<io.h>

_wmktemp_s

<io.h oder> wchar.h <>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.

Beispiel

// crt_mktemp_s.cpp
/* 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 *fnTemplate = "fnXXXXXX";
char names[5][9];

int main()
{
   int i, err, sizeInChars;
   FILE *fp;

   for( i = 0; i < 5; i++ )
   {
      strcpy_s( names[i], sizeof(names[i]), fnTemplate );
      /* Get the size of the string and add one for the null terminator.*/
      sizeInChars = strnlen(names[i], 9) + 1;
      /* Attempt to find a unique filename: */
      err = _mktemp_s( names[i], sizeInChars );
      if( err != 0 )
         printf( "Problem creating the template" );
      else
      {
         if( fopen_s( &fp, names[i], "w" ) == 0 )
            printf( "Unique filename is %s\n", names[i] );
         else
            printf( "Cannot open %s\n", names[i] );
         fclose( fp );
      }
   }

   return 0;
}

Beispielausgabe

Unique filename is fna03188
Unique filename is fnb03188
Unique filename is fnc03188
Unique filename is fnd03188
Unique filename is fne03188

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