_tempnam
, , _wtempnam
tmpnam
_wtmpnam
Generiert Namen, die Sie verwenden können, um temporäre Dateien zu erstellen. Sicherere Versionen einiger dieser Funktionen sind verfügbar; siehe tmpnam_s
, _wtmpnam_s
.
Syntax
char *_tempnam(
const char *dir,
const char *prefix
);
wchar_t *_wtempnam(
const wchar_t *dir,
const wchar_t *prefix
);
char *tmpnam(
char *str
);
wchar_t *_wtmpnam(
wchar_t *str
);
Parameter
prefix
Die Zeichenfolge, die vor den namen, die von _tempnam
.
dir
Der im Dateinamen verwendete Pfad, wenn keine TMP-Umgebungsvariable vorhanden ist oder TMP kein gültiges Verzeichnis ist.
str
Zeiger, der den generierten Namen enthält, identisch mit dem namen, der von der Funktion zurückgegeben wird. Es ist eine bequeme Möglichkeit, den generierten Namen zu speichern.
Rückgabewert
Jede dieser Funktionen gibt einen Zeiger auf den generierten Namen zurück oder NULL
wenn ein Fehler auftritt. Fehler können auftreten, wenn Sie mehr versuchen als TMP_MAX
(siehe STDIO. H) Aufrufe mit tmpnam
oder wenn Sie verwenden _tempnam
, und es gibt einen ungültigen Verzeichnisnamen, der in der TMP
Umgebungsvariable und im dir
Parameter angegeben ist.
Hinweis
Die von tmpnam
und _wtmpnam
zurückgegebenen Zeiger zeigen auf die internen statischen Puffer. free
sollte nicht aufgerufen werden, diese Zeiger zu verlagern. free
muss für von _tempnam
und _wtempnam
zugeordnete Zeiger aufgerufen werden.
Hinweise
Jede dieser Funktionen gibt den Namen einer Datei zurück, die derzeit nicht vorhanden ist. tmpnam
gibt einen Eindeutigen Namen im angegebenen temporären Windows-Verzeichnis zurück, das von GetTempPathW
. _tempnam
generiert einen eindeutigen Namen in einem anderen Verzeichnis als dem angegebenen. Wenn ein Dateiname einem umgekehrten Schrägstrich vorangestellt ist und keine Pfadinformationen vorhanden sind, z \fname21
. B. gibt er an, dass der Name für das aktuelle Arbeitsverzeichnis gültig ist.
Für tmpnam
können Sie diesen generierten Dateinamen in str
speichern. Wenn str
NULL
ist, dann hinterlässt tmpnam
das Ergebnis in einem internen statischen Puffer. Alle nachfolgenden Aufrufe zerstören deshalb diesen Wert. Der von tmpnam
generierte Name besteht aus einem vom Programm generierten Dateinamen und nach dem ersten Aufruf von tmpnam
aus einer Dateierweiterung aus aufeinanderfolgenden Zahlen mit Basis 32 (.1-.vvu, wenn TMP_MAX
in STDIO.H 32,767 ist).
_tempnam
generiert einen eindeutigen Dateinamen für ein Verzeichnis, das durch die folgenden Regeln ausgewählt wird:
Wenn die TMP-Umgebungsvariable definiert und auf einen gültigen Verzeichnisnamen festgelegt ist, werden eindeutige Dateinamen für das durch TMP angegebene Verzeichnis generiert.
Wenn die TMP-Umgebungsvariable nicht definiert ist oder auf den Namen eines nicht vorhandenen Verzeichnisses festgelegt ist, verwendet den
dir
Parameter als Pfad,_tempnam
für den eindeutige Namen generiert werden.Wenn die TMP-Umgebungsvariable nicht definiert ist oder auf den Namen eines nicht vorhandenen Verzeichnisses festgelegt ist und
dir
wenn sie auf den Namen eines nicht vorhandenen Verzeichnisses festgelegt ist oder auf den Namen eines nicht vorhandenen Verzeichnisses festgelegt istNULL
, verwendet das aktuelle Arbeitsverzeichnis,_tempnam
um eindeutige Namen zu generieren. Wenn sowohl TMPdir
als auch Namen von Verzeichnissen angegeben werden, die nicht vorhanden sind, schlägt der _tempnam Funktionsaufruf fehl.
Der von _tempnam
ihnen zurückgegebene Name ist eine Verkettung von prefix
und eine sequenzielle Zahl, die kombiniert, um einen eindeutigen Dateinamen für das angegebene Verzeichnis zu erstellen. _tempnam
generiert Dateinamen, die keine Erweiterung haben. _tempnam
verwendet malloc
, um Speicherplatz für den Dateinamen zuzuweisen. Das Programm ist dafür verantwortlich, diesen Speicherplatz freizugeben, wenn er nicht mehr benötigt wird.
_tempnam
und tmpnam
behandeln Multibyte-Zeichenfolgenargumente automatisch als richtig. Die Erkennung von Multibyte-Zeichenfolgen erfolgt auf der Grundlage der Codepage des OEM aus dem Betriebssystem. _wtempnam
ist eine Breitzeichenversion von _tempnam
. Die Argumente und der Rückgabewert von _wtempnam
sind Zeichenfolgen mit Breitzeichen. _wtempnam
und _tempnam
verhalten sich identisch, mit der Ausnahme, dass _wtempnam
multibyte-Zeichenfolgen nicht behandelt werden. _wtmpnam
ist eine Breitzeichenversion von tmpnam
. Das Argument und der Rückgabewert von _wtmpnam
sind Zeichenfolgen mit Breitzeichen. _wtmpnam
und tmpnam
verhalten sich identisch, mit der Ausnahme, dass _wtmpnam
multibyte-Zeichenfolgen nicht behandelt werden.
If _DEBUG
and _CRTDBG_MAP_ALLOC
are defined, _tempnam
and _wtempnam
are replaced by calls to _tempnam_dbg
and _wtempnam_dbg
.
Mapping generischer Textroutinen
TCHAR.H-Routine | _UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_ttmpnam |
tmpnam |
tmpnam |
_wtmpnam |
_ttempnam |
_tempnam |
_tempnam |
_wtempnam |
Anforderungen
Routine | Erforderlicher Header |
---|---|
_tempnam |
<stdio.h> |
_wtempnam , _wtmpnam |
<stdio.h> oder <wchar.h> |
tmpnam |
<stdio.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// temporary directory, and _tempname to create a unique filename
// in C:\\tmp.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char * name1 = NULL;
char * name2 = NULL;
char * name3 = NULL;
// Create a temporary filename for the current working directory:
if ((name1 = tmpnam(NULL)) != NULL) { // C4996
// Note: tmpnam is deprecated; consider using tmpnam_s instead
printf("%s is safe to use as a temporary file.\n", name1);
} else {
printf("Cannot create a unique filename\n");
}
// Create a temporary filename in temporary directory with the
// prefix "stq". The actual destination directory may vary
// depending on the state of the TMP environment variable and
// the global variable P_tmpdir.
if ((name2 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name2);
} else {
printf("Cannot create a unique filename\n");
}
// When name2 is no longer needed:
if (name2) {
free(name2);
}
// Unset TMP environment variable, then create a temporary filename in C:\tmp.
if (_putenv("TMP=") != 0) {
printf("Could not remove TMP environment variable.\n");
}
// With TMP unset, we'll use C:\tmp as the temporary directory.
// Create a temporary filename in C:\tmp with prefix "stq".
if ((name3 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name3);
}
else {
printf("Cannot create a unique filename\n");
}
// When name3 is no longer needed:
if (name3) {
free(name3);
}
return 0;
}
C:\Users\LocalUser\AppData\Local\Temp\sriw.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\stq2 is safe to use as a temporary file.
c:\tmp\stq3 is safe to use as a temporary file.