Udostępnij przez


_mktemp, _wmktemp

Tworzy unikatową nazwę pliku. Dostępne są bezpieczniejsze wersje tych funkcji; zobacz _mktemp_s, _wmktemp_s.

Składnia

char *_mktemp(
   char *nameTemplate
);
wchar_t *_wmktemp(
   wchar_t *nameTemplate
);
template <size_t size>
char *_mktemp(
   char (&nameTemplate)[size]
); // C++ only
template <size_t size>
wchar_t *_wmktemp(
   wchar_t (&nameTemplate)[size]
); // C++ only

Parametry

nameTemplate
Wzorzec nazwy pliku.

Wartość zwracana

Każda z tych funkcji zwraca wskaźnik do zmodyfikowanej nazwyTemplate. Funkcja zwraca NULL wartość , jeśli nameTemplate jest źle sformułowana lub nie można utworzyć więcej unikatowych nazw na podstawie podanej nazwyTemplate.

Uwagi

Funkcja _mktemp tworzy unikatową nazwę pliku, modyfikując nameTemplate argument. _mktemp automatycznie obsługuje odpowiednio argumenty ciągu wielobajtowego, rozpoznając sekwencje znaków wielobajtowych zgodnie ze stroną kodową wielobajtową używaną obecnie przez system czasu wykonywania. _wmktemp jest wersją szerokoznakową ; _mktempargument i wartość zwracana _wmktemp są ciągami o szerokim znaku. _wmktemp i _mktemp zachowują się identycznie inaczej, z tą różnicą, że _wmktemp nie obsługuje ciągów wielobajtowych znaków.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Mapowania procedur tekstu ogólnego

Procedura tchar.h _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_tmktemp _mktemp _mktemp _wmktemp

Argument nameTemplate ma postać baseXXXXXX, gdzie base jest częścią podanej nazwy nowego pliku, a każdy X jest symbolem zastępczym znaku dostarczonego przez _mktempelement . Każdy symbol zastępczy w nameTemplate elemencie musi być wielkimi literami X. _mktemp zachowuje base i zastępuje pierwszy końcowy znak X znakiem alfabetycznym. _mktemp Zastępuje końcowe znaki X pięciocyfrową wartością. Ta wartość jest unikatową liczbą identyfikującą proces wywołujący lub w programach wielowątkowych wywołujący wątek.

Każde pomyślne wywołanie modyfikuje metodę _mktempnameTemplate. W każdym kolejnym wywołaniu z tego samego procesu lub wątku z tym samym nameTemplate argumentem _mktemp sprawdza nazwy plików, które pasują do nazw zwracanych przez _mktemp w poprzednich wywołaniach. Jeśli żaden plik nie istnieje dla danej nazwy, _mktemp zwraca tę nazwę. Jeśli pliki istnieją dla wszystkich poprzednio zwracanych nazw, tworzy nową nazwę, _mktemp zastępując znak alfabetyczny używany w wcześniej zwróconej nazwie następną małą literą, w kolejności od "a" do "z". Jeśli na przykład base :

fn

a pięciocyfrowa wartość podana przez _mktemp element to 12345, zwracane imię to:

fna12345

Jeśli ta nazwa jest używana do tworzenia pliku FNA12345 i ten plik nadal istnieje, następna nazwa zwracana przy wywołaniu z tego samego procesu lub wątku o tym samym base dla nameTemplate :

fnb12345

Jeśli FNA12345 nie istnieje, zwracana jest kolejna nazwa:

fna12345

_mktemp Program może utworzyć maksymalnie 26 unikatowych nazw plików dla dowolnej kombinacji base wartości i nameTemplate . W związku z tym FNZ12345 jest ostatnią unikatową nazwą _mktemp pliku, która może zostać utworzona dla base wartości i nameTemplate użytych w tym przykładzie.

Po awarii errno jest ustawiona. Jeśli nameTemplate ma nieprawidłowy format (na przykład mniej niż sześć znaków X), errno jest ustawiony na EINVALwartość . Jeśli _mktemp nie można utworzyć unikatowej nazwy, ponieważ wszystkie 26 możliwych nazw plików już istnieje, _mktemp ustawia parametr nameTemplate na pusty ciąg i zwraca wartość EEXIST.

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

Wymagania

Procedura Wymagany nagłówek
_mktemp <io.h>
_wmktemp <io.h> lub <wchar.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

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 );
      }
   }
}
Unique filename is fna03912
Unique filename is fnb03912
Unique filename is fnc03912
Unique filename is fnd03912
Unique filename is fne03912
Unique filename is fnf03912
Unique filename is fng03912
Unique filename is fnh03912
Unique filename is fni03912
Unique filename is fnj03912
Unique filename is fnk03912
Unique filename is fnl03912
Unique filename is fnm03912
Unique filename is fnn03912
Unique filename is fno03912
Unique filename is fnp03912
Unique filename is fnq03912
Unique filename is fnr03912
Unique filename is fns03912
Unique filename is fnt03912
Unique filename is fnu03912
Unique filename is fnv03912
Unique filename is fnw03912
Unique filename is fnx03912
Unique filename is fny03912
Unique filename is fnz03912
Problem creating the template.
Out of unique filenames.

Zobacz też

Obsługa plików
fopen, _wfopen
_getmbcp
_getpid
_open, _wopen
_setmbcp
_tempnam, _wtempnam, tmpnam, _wtmpnam
tmpfile