Udostępnij za pośrednictwem


_mktemp, _wmktemp

Tworzy unikatową nazwę pliku.Bezpieczniejsze wersje te funkcje są dostępne; 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
    Wzorzec nazwy pliku.

Wartość zwracana

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

Uwagi

_mktemp Funkcja tworzy unikatową nazwę pliku, modyfikując template argument._mktempautomatycznie obsługuje argumentów łańcuch znaków wielobajtowych, odpowiednio, uznając sekwencje znaków wielobajtowych, zgodnie z obecnie używanej strony kodowej wielobajtowych przez system run-time._wmktempjest to wersja szerokich znaków _mktemp; wartość argumentów i _wmktemp są ciągami szerokich znaków._wmktempi _mktemp zachowują się identycznie inaczej, z wyjątkiem _wmktemp nie obsługuje ciągów znaków wielobajtowych.

Tekst rodzajowy rutynowych mapowania

Procedura TCHAR.h

_UNICODE i _MBCS nie zdefiniowane

_MBCS, definicja

_UNICODE, definicja

_tmktemp

_mktemp

_mktemp

_wmktemp

template Argument ma postać baseXXXXXX, gdzie base jest częścią nową nazwę pliku, który można dostarczyć i każdego x jest symbolem zastępczym dla znaków, dostarczonych przez _mktemp.Każdy znak symbolu zastępczego w template musi być wielkie litery X._mktempzachowuje base i zamienia pierwsze x końcowe znaku alfabetycznego._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 przypadku programów wielowątkowych, wątek wywołujący.

Każdym udanym wywołaniu _mktemp modyfikuje template.W każdej kolejne wywołanie z tego samego procesu lub wątku z tym samym template argument, _mktemp sprawdza, czy nazwy plików, które odpowiadają nazwom zwrócony przez _mktemp w poprzedniego wywołania.Jeśli plik nie istnieje dla podanej nazwy _mktemp zwraca tę nazwę.Jeśli pliki znajdują się na wszystkie zwrócone wcześniej nazwy, _mktemp tworzy nową nazwą, zastępując znak alfabetu, używane w nazwie poprzednio zwróconych z kolejna dostępna litera małe, w kolejności od "a" przez "z".Na przykład jeśli base jest:

fn

i pięć cyfr dostarczonych przez _mktemp jest 12345, imię, zwracany jest:

fna12345

Jeśli ta nazwa jest używana do tworzenia pliku FNA12345 i plik ten nadal istnieje, następnej nazwy zwracane na rozmowę z tego samego procesu lub wątku z tym samym base do template jest:

fnb12345

FNA12345 nie istnieje, ponownie jest zwracana nazwa dalej:

fna12345

_mktempmożna utworzyć maksymalnie 26 unikatowych nazw plików na danym połączeniu w 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 nie jest w stanie utworzyć unikatowej nazwy, ponieważ wszystkie nazwy pliku możliwe 26 już istnieje, _mktemp ustawia ciąg pusty szablon i zwraca EEXIST.

W języku C++ funkcje te mają overloads szablonu, które wywołują nowsze, bezpieczne odpowiednikami tych funkcji.Aby uzyskać więcej informacji, zobacz Secure, szablon Overloads.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

_mktemp

<io.h>

_wmktemp

<io.h> lub <wchar.h>

Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.

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ć standardowych funkcji C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.

Zobacz też

Informacje

Obsługa plików

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile