Freigeben über


_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 strNULL 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 ist NULL , verwendet das aktuelle Arbeitsverzeichnis, _tempnam um eindeutige Namen zu generieren. Wenn sowohl TMP dir 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.

Generische Textroutinzuordnungen

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.

Siehe auch

Stream-E/A
_getmbcp
malloc
_setmbcp
tmpfile
tmpfile_s