_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 neboNULL
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 idir
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 definovaný |
_UNICODE definovaný |
---|---|---|---|
_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