Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

Zpracování souborů

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile