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