Sdílet prostřednictvím


_tempnam, _wtempnam, tmpnam, _wtmpnam

Vygenerujte názvy, které můžete použít k vytvoření dočasných souborů. K dispozici jsou bezpečnější verze některých z těchto funkcí; viz tmpnam_s, _wtmpnam_s.

Syntaxe

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
);

Parametry

prefix
Řetězec, který je předpřipravený k názvům vráceným ._tempnam

dir
Cesta použitá v názvu souboru, pokud neexistuje žádná proměnná prostředí TMP nebo pokud TMP není platný adresář.

str
Ukazatel, který obsahuje vygenerovaný název, shodný s názvem vráceným funkcí. Je to pohodlný způsob, jak vygenerovaný název uložit.

Vrácená hodnota

Každá z těchto funkcí vrátí ukazatel na vygenerovaný název nebo NULL pokud dojde k chybě. K chybě může dojít, pokud se pokusíte o více než TMP_MAX (viz STDIO. H) volá nebo tmpnam pokud používáte _tempnam a v proměnné prostředí a v parametru dir je zadán TMP neplatný název adresáře.

Poznámka

Ukazatele vrácené tmpnam interními statickými vyrovnávacími paměťmi a _wtmpnam ukazují na je. free by nemělo být volána k uvolnění těchto ukazatelů. free musí být volána pro ukazatele přidělené _tempnam a _wtempnam.

Poznámky

Každá z těchto funkcí vrátí název souboru, který aktuálně neexistuje. tmpnam vrátí název, který je jedinečný v určeném dočasném adresáři Windows vrácený GetTempPathW. _tempnam vygeneruje jedinečný název v jiném adresáři než v určeném adresáři. Pokud je název souboru předzálohován zpětným lomítkem a neobsahuje informace o cestě, například \fname21, značí, že název je platný pro aktuální pracovní adresář.

Pro tmpnam, můžete uložit tento vygenerovaný název souboru v str. Pokud str ano NULL, ponechejte tmpnam výsledek v interní statické vyrovnávací paměti. Všechna následná volání tedy tuto hodnotu zničí. Název vygenerovaný tmpnam pomocí programu se skládá z názvu souboru generovaného programem a po prvním volání tmpnam, příponu souboru sekvenčních čísel v základu 32 (.1-.vvu, když TMP_MAX v STDIO. H je 32 767).

_tempnam vygeneruje jedinečný název souboru pro adresář vybraný následujícími pravidly:

  • Pokud je proměnná prostředí TMP definována a nastavena na platný název adresáře, vygenerují se jedinečné názvy souborů pro adresář určený TMP.

  • Pokud proměnná prostředí TMP není definovaná nebo pokud je nastavená na název adresáře, který neexistuje, použije dir parametr jako cestu, _tempnam pro kterou generuje jedinečné názvy.

  • Pokud proměnná prostředí TMP není definovaná nebo je nastavená na název adresáře, který neexistuje, a pokud dir je nebo NULL je nastavená na název adresáře, který neexistuje, _tempnam použije aktuální pracovní adresář k vygenerování jedinečných názvů. V současné době platí, že pokud TMP i dir zadat názvy adresářů, které neexistují, volání funkce _tempnam selže.

Název vrácený _tempnam je zřetězením prefix a sekvenčním číslem, které kombinuje vytvoření jedinečného názvu souboru pro zadaný adresář. _tempnam generuje názvy souborů, které nemají příponu. _tempnam používá malloc k přidělení místa pro název souboru; program je zodpovědný za uvolnění tohoto místa, když už není potřeba.

_tempnam a tmpnam automaticky zpracovává vícebajtové řetězcové argumenty podle potřeby a rozpoznává sekvence vícebajtových znaků podle znakové stránky OEM získané z operačního systému. _wtempnam je verze širokého znaku _tempnam; argumenty a návratová _wtempnam hodnota jsou řetězce širokého znaku. _wtempnam a _tempnam chovat se identicky s tím rozdílem, že _wtempnam nezpracovává vícebajtové řetězce. _wtmpnam je verze širokého znaku tmpnam; argument a návratová _wtmpnam hodnota jsou řetězce širokých znaků. _wtmpnam a tmpnam chovat se identicky s tím rozdílem, že _wtmpnam nezpracovává vícebajtové řetězce.

Jsou-li _DEBUG definovány _tempnam a _wtempnam_CRTDBG_MAP_ALLOC jsou nahrazeny voláním a _tempnam_dbg_wtempnam_dbg.

Mapování rutin obecného textu

Rutina TCHAR.H _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_ttmpnam tmpnam tmpnam _wtmpnam
_ttempnam _tempnam _tempnam _wtempnam

Požadavky

Rutina Požadovaný hlavičkový soubor
_tempnam <stdio.h>
_wtempnam, _wtmpnam <stdio.h> nebo <wchar.h>
tmpnam <stdio.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

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

Viz také

Vstupně-výstupní operace streamu
_getmbcp
malloc
_setmbcp
tmpfile
tmpfile_s