_mktemp _wmktemp
Vytvoří jedinečný název souboru.Bezpečnější verze tyto funkce jsou k dispozici; see _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ě.Funkce vrátí NULL -li template je chybně utvořena nebo z dané šablony lze vytvořit další jedinečné názvy.
Poznámky
_mktemp Funkce vytvoří jedinečný název souboru změnou template argument._mktempautomaticky zpracovává argumenty řetězec vícebajtových znaků podle potřeby UZNÁVAJÍCE vícebajtové znakové sekvence podle vícebajtové znakové stránky právě používán spuštění systému._wmktempje verze celého znaku _mktemp; hodnota argumentu a návrat _wmktemp jsou celý znak řetězce._wmktempa _mktemp chovají jinak shodně s výjimkou, že _wmktemp nezpracovává vícebajtové znakové řetězce.
Obecný Text rutinní mapování
Rutina Tchar.h |
_UNICODE a _MBCS není definován |
_MBCS, definice |
_UNICODE, definice |
---|---|---|---|
_tmktemp |
_mktemp |
_mktemp |
_wmktemp |
template Argument má tvar baseXXXXXX, kde base je nový název souboru, je součástí 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ává base a nahradí první koncové x abecední znak._mktempnahradí následující koncové x s pěti číslicemi hodnotu; Tato hodnota je jedinečné číslo identifikující volající proces, nebo s více podprocesy programy 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 kontroly názvů 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í název.Pokud existují soubory pro všechny dříve vráceny názvy, _mktemp nahrazením abecední znak používá název dříve vrácených s další malé písmeno, v pořadí od "a" až "z" vytvoří nový název.Například pokud base je:
fn
a hodnota pětimístná poskytnutých _mktemp je 12345, je vrácen název první:
fna12345
Pokud tento název se používá k vytvoření souboru FNA12345 a tento soubor stále existuje, další název vrácené volání stejný proces nebo podproces se stejným base pro template je:
fnb12345
Pokud FNA12345 neexistuje, je opět vrátil následující název:
fna12345
_mktempmůžete vytvořit maximálně 26 jedinečných názvů souborů pro jakékoli dané kombinace hodnot base a šablony.FNZ12345 tedy poslední jedinečný název _mktemp můžete vytvořit base a template hodnoty použité v tomto příkladu.
Při selhání errno je nastavena.Pokud template má neplatný formát (například méně než 6 X), errno je nastavena na EINVAL.Pokud _mktemp nelze vytvořit jedinečný název, protože všechny 26 možné názvy již existují, _mktemp nastaví šablony prázdný řetězec a vrátí EEXIST.
V jazyce C++ mají tyto funkce šablony přetížení, které vyvolávají novější, zabezpečené protějšků těchto funkcí.Další informace naleznete v tématu Přetížení šablony zabezpečení.
Požadavky
Rutina |
Požadované záhlaví |
---|---|
_mktemp |
<io.h> |
_wmktemp |
<io.h> nebo <wchar.h> |
Další informace o kompatibilitě v tématu Compatibility v úvodu.
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 Použijte volání funkce standardní C, PInvoke. Další informace naleznete v tématu Příklady vyvolat platformu.