Udostępnij za pośrednictwem


_mktemp, _wmktemp

Tworzy unikatową nazwę pliku.Bardziej bezpieczne wersje tych funkcji są dostępne w _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
    Schemat nazwy pliku.

Wartość zwracana

Każda z tych funkcji zwraca wskaźnik na zmodyfikowanym szablonie.Funkcja zwraca NULL Jeśli template jest nieprawidłowo sformułowana lub ma więcej unikatowych nazw można tworzyć na podstawie danego szablonu.

Uwagi

_mktemp Funkcja tworzy unikatową nazwę pliku zmieniając template argument._mktempautomatycznie obsługuje argumenty ciąg znaków wielobajtowych odpowiednio, uznając sekwencje znaków wielobajtowych według strona kodowa wielobajtowych obecnie w użyciu przez system wykonawczy._wmktempjest to wersja szeroko charakter _mktemp; wartość argumentów i _wmktemp są ciągi znaków wide._wmktempi _mktemp zachowują się identycznie inaczej, chyba że _wmktemp nie obsługuje ciągów znaków wielobajtowych.

Rutynowe mapowania zwykłego tekstu

Procedura Tchar.h

_UNICODE i _MBCS nie zdefiniowany

_MBCS zdefiniowano

_UNICODE zdefiniowany

_tmktemp

_mktemp

_mktemp

_wmktemp

template Argument ma postać baseXXXXXX, gdzie base jest częścią nowej nazwy pliku, które można dostarczać i każdego X jest symbolem zastępczym dla znaku dostarczonych przez _mktemp.Każdy znak symbolu zastępczego w template musi być wielkie litery X._mktempzachowuje base i zamienia pierwsze X końcowe na znak alfabetyczny._mktempzastępuje następujące końcowe x o wartości 5 cyfrowy; Ta wartość jest unikatowy numer identyfikujący wywołujący proces, lub w programów wielowątkowych, wywołujący wątku.

Każdy pomyślne wywołanie _mktemp modyfikuje template.W każde kolejne wywołanie z tego samego procesu lub wątku o tej samej template argument, _mktemp sprawdza, czy nazwy plików, które odpowiadają nazwom zwrócone przez _mktemp w poprzednich wywołań.Jeśli plik nie istnieje dla podanej nazwy, _mktemp zwraca tę nazwę.Jeśli pliki znajdują się za każdą odrzuconą wcześniej nazwy, _mktemp tworzy nową nazwę, zastępując znak alfabetu, to użyty w nazwie poprzednio zwróconych z następny dostępny małą literę, w kolejności od "" do "z".Na przykład jeśli base jest:

fn

i pięciocyfrowe wartości dostarczonych przez _mktemp jest 12345, imię, zwracane jest:

fna12345

Jeśli ta nazwa jest używana do tworzenia pliku FNA12345, a tego pliku nadal istnieje, następnej nazwy zwracane na połączenie z tym samym proces lub wątek o tej samej base dla template jest:

fnb12345

Jeśli FNA12345 nie istnieje, następnej nazwy zwracane jest ponownie:

fna12345

_mktempmożna utworzyć maksymalnie 26 unikatowe nazwy plików dla dowolnej danej kombinacji wartości base i szablon.W związku z tym, FNZ12345 jest nazwisko unikatowy plik _mktemp można utworzyć dla base i template wartości używane w tym przykładzie.

W przypadku awarii errno jest ustawiona.Jeśli template ma nieprawidłowy format (na przykład mniej niż 6 x), errno jest ustawiona na EINVAL.Jeśli _mktemp jest w stanie utworzyć unikatowej nazwy, ponieważ istnieje już wszystkie nazwy plików możliwe 26, _mktemp ustawia ciąg pusty szablon i zwraca EEXIST.

W języku programowania C++ funkcje te mają przeciążenia szablonu, które wywołują nowsze, bezpieczne odpowiedniki tych funkcji.Aby uzyskać więcej informacji, zobacz Przeciążenia bezpiecznych szablonów.

Wymagania

Procedura

Wymagany nagłówek

_mktemp

<io.h>

_wmktemp

<IO.h> lub <wchar.h>

Aby uzyskać więcej informacji na temat zgodności, zobacz Zgodność we Wstępie.

Przykład

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

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywołać standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywoływania platformy.

Zobacz też

Informacje

Obsługa plików

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile