Freigeben über


_mktemp_s, _wmktemp_s

Erstellt einen eindeutigen Dateinamen.Dies sind Versionen von _mktemp, _wmktemp mit beschrieben, wie unter Security Enhancements in Sicherheitsfeatures im CRT.

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. _wmktemp_sin Breitzeichen, einschließlich des NULL-Terminators.

Rückgabewert

Beide Funktionen geben bei Erfolg (null) zurück. Fehlercode ein Fehler auf.

Fehlerbedingungen

template

sizeInChars

Rückgabewert

Der neue Wert in der Vorlage

NULL

alle

EINVAL

NULL

Falsches Format (siehe Abschnitt Remarks das richtige Format)

alle

EINVAL

leeren Zeichenfolge

alle

<=-Zahl von X

EINVAL

leeren Zeichenfolge

Wenn eine der oben genannten Fehlerzuständen, wird der Ereignishandler aufgerufen wird auf ungültige Parameter in Parametervalidierungbeschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, wird errno zu EINVAL festgelegt, und die Funktionen vorhanden sind EINVALzurück.

Hinweise

Die _mktemp_s-Funktion erstellt einen eindeutigen Dateinamen, indem Sie das template-Argument, sodass ändert, nachdem der Aufruf, der template Zeiger auf eine Zeichenfolge zeigt, die den neuen Dateinamen enthält.Mehrbyte-Zeichenfolgen-Argumente und bei Bedarf automatisch behandelt_mktemp_s derzeit verwendeten erkennt Mehrbytezeichen sequenzen 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 verhalten sich identisch, mit der Ausnahme, dass andernfalls _wmktemp_s Mehrbyte-Zeichenfolgen nicht behandelt.

Zuweisung generischer Textroutinen

Tchar.h-Routine

_UNICODE als auch _MBCS nicht definiert

_MBCS definieren

_UNICODE definiert

_tmktemp_s

_mktemp_s

_mktemp_s

_wmktemp_s

Das template-Argument hat das Formular, in dem base der Teil des neuen Dateinamens ist, den Sie bereitstellen und jedes X ist ein Platzhalter für ein Zeichen, das von _mktemp_sangegeben wird.Jedes Platzhalterzeichen in template muss eine Großschreibung X sein._mktemp_s behält base bei und ersetzt die erste schleppende X durch ein alphabetisches Zeichen.Nachkommanullen folgenden ersetzt_mktemp_s 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_s ändert template.In jedem nachfolgenden Aufruf von demselben Prozess oder Thread mit demselben template-Argument, _mktemp_s beachten, dass Dateinamen für Überprüfungen durch den Namen _mktemp_s in den vorhergehenden Aufrufen zurückgegebenen.Wenn keine Datei für einen angegebenen Namen vorhanden ist, gibt _mktemp_s diesen Namen zurück.Wenn Dateien für alle zuvor zurückgegebenen Namen vorhanden sind, erstellt einen neuen Namen _mktemp_s 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_s 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_s kann maximal 26 eindeutigen Dateinamen für jede angegebene Kombination von Basis- und Vorlagen werten erstellt.Daher ist FNZ12345 der letzte eindeutige Dateinamen _mktemp_s kann für die base und template-Werte erstellen, die in diesem Beispiel verwendet werden.

In C++ unter Verwendung dieser Funktionen wird von Vorlagen Operatoren vereinfacht. Die Überladungen können die Pufferlänge (die Anforderung automatisch beseitigend ableiten, die ein Argument angegeben) und können nicht-sicheren, die älteren Funktionen über ihre Äquivalente sicheren, aktuelleren automatisch ersetzen.Weitere Informationen finden Sie unter Speichern Sie Vorlagen-Überladungen.

Anforderungen

Routine

Erforderlicher Header

_mktemp_s

<io.h>

_wmktemp_s

<io.h> oder <wchar.h>

Weitere Informationen finden Sie unter Kompatibilität 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. 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_s