_mktemp, _wmktemp
Vytvoří jedinečný název souboru.Bezpečnější verze těchto funkcí jsou k dispozici; viz _mktemp_s, _wmktemp_s.
char *_mktemp(
char *template
);
wchar_t *_wmktemp(
wchar_t *template
);
template <size_t size>
char *_mktemp(
char (&template)[size]
); // C++ only
template <size_t size>
wchar_t *_wmktemp(
wchar_t (&template)[size]
); // C++ only
Parametry
- template
Vzor názvu souboru.
Vrácená hodnota
Každá z těchto funkcí vrací ukazatel na upravené šabloně.Vrátí funkce NULL -li template je chybně utvořena nebo žádné další jedinečné názvy lze vytvořit na základě dané šablony.
Poznámky
_mktemp Funkce vytvoří jedinečný název souboru změnou template argument._mktempautomaticky zpracovává vícebajtové znakové řetězce argumenty podle potřeby, uznávajíce vícebajtové znakové sekvence podle vícebajtová znaková stránka aktuálně používán systém spuštění._wmktempje verze širokého znaku _mktemp; hodnota argumentu a návrat _wmktemp jsou řetězci širokého znaku._wmktempa _mktemp chovaly jinak, stejně jako s výjimkou _wmktemp zpracovává vícebajtové znakové řetězce.
Rutinní mapování obecného textu
Rutina Tchar.h |
_UNICODE a _MBCS nejsou definovány |
_MBCS definováno |
_UNICODE definováno |
---|---|---|---|
_tmktemp |
_mktemp |
_mktemp |
_wmktemp |
template Argument má tvar baseXXXXXX, kde base je součástí nový název souboru, který poskytujete a každé X je zástupný symbol pro znak poskytnutých _mktemp.Každý zástupný znak v template musí být velkými písmeny X._mktempzachová base a nahradí první Koncové X abecední znak._mktempnahrazuje následující koncové značkou s hodnotou pětimístné; Tato hodnota je jedinečné číslo identifikující volající proces, nebo programy s více vlákny, volající vlákno.
Každé úspěšné volání _mktemp upravuje template.V každé následné volání z stejný proces nebo podproces se stejným template argument, _mktemp vyhledá názvy souborů, které odpovídají názvy vrácené _mktemp v předchozí volání.Pokud neexistuje žádný soubor pro zadaný název _mktemp vrátí tento název.Pokud existují soubory pro všechny dříve vrácené názvy, _mktemp vytvoří nový název nahrazením abecední znak, je použít v názvu dříve vrácených s další malé písmeno, v pořadí od "a" až "z".Například pokud base je:
fn
pětimístné hodnotu poskytnutých a _mktemp je 12345, je vrácen název první:
fna12345
Pokud tento název se používá k vytvoření souboru FNA12345 a soubor stále existuje, další název vrácené volání stejný proces nebo podproces se stejným base k template je:
fnb12345
Pokud FNA12345 neexistuje, je vrácen název dalšího znovu:
fna12345
_mktemplze vytvořit maximálně 26 jedinečných názvů souborů pro libovolné dané hodnoty základní a šablony.FNZ12345 tedy příjmení jedinečný soubor _mktemp můžete vytvořit base a template hodnoty použité v tomto příkladu.
Při selhání errno je nastaven.Pokud template je v neplatném formátu (například méně než 6 značkou), errno je nastavena na EINVAL.Pokud _mktemp nelze vytvořit jedinečný název, protože názvy souborů všech 26 již existují, _mktemp nastaví šablonu na prázdný řetězec a vrátí EEXIST.
V jazyce C++ mají tyto funkce přetížení šablon, která vyvolávají novější, zabezpečené protějšky těchto funkcí.Další informace naleznete v tématu Přetížení zabezpečení šablony.
Požadavky
Rutina |
Požadované záhlaví |
---|---|
_mktemp |
<io.h> |
_wmktemp |
<IO.h> nebo <wchar.h> |
Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.
Příklad
// crt_mktemp.c
// compile with: /W3
/* The program uses _mktemp to create
* unique filenames. It opens each filename
* to ensure that the next name is unique.
*/
#include <io.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
char *template = "fnXXXXXX";
char *result;
char names[27][9];
int main( void )
{
int i;
FILE *fp;
for( i = 0; i < 27; i++ )
{
strcpy_s( names[i], sizeof( names[i] ), template );
/* Attempt to find a unique filename: */
result = _mktemp( names[i] ); // C4996
// Note: _mktemp is deprecated; consider using _mktemp_s instead
if( result == NULL )
{
printf( "Problem creating the template\n" );
if (errno == EINVAL)
{
printf( "Bad parameter\n");
}
else if (errno == EEXIST)
{
printf( "Out of unique filenames\n");
}
}
else
{
fopen_s( &fp, result, "w" );
if( fp != NULL )
printf( "Unique filename is %s\n", result );
else
printf( "Cannot open %s\n", result );
fclose( fp );
}
}
}
Ekvivalent v rozhraní .NET Framework
Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.