Udostępnij przez


_mktemp_s, _wmktemp_s

Tworzy unikatową nazwę pliku. Te funkcje to wersje programu _mktemp_wmktempz ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.

Składnia

errno_t _mktemp_s(
   char *nameTemplate,
   size_t sizeInChars
);
errno_t _wmktemp_s(
   wchar_t *nameTemplate,
   size_t sizeInChars
);
template <size_t size>
errno_t _mktemp_s(
   char (&nameTemplate)[size]
); // C++ only
template <size_t size>
errno_t _wmktemp_s(
   wchar_t (&nameTemplate)[size]
); // C++ only

Parametry

nameTemplate
Wzorzec nazwy pliku.

sizeInChars
Rozmiar buforu w postaci znaków jednobajtowych w _mktemp_sobiekcie ; znaki szerokie w _wmktemp_sobiekcie , w tym terminator o wartości null.

Wartość zwracana

Obie te funkcje zwracają zero w przypadku powodzenia; kod błędu dotyczący błędu.

Warunki błędu

nameTemplate sizeInChars Wartość zwracana Nowa wartość w nameTemplate
NULL dowolny EINVAL NULL
Niepoprawny format (zobacz sekcję Uwagi, aby uzyskać poprawny format) dowolny EINVAL pusty ciąg
dowolny <= liczba znaków X EINVAL pusty ciąg

Jeśli wystąpi którykolwiek z powyższych warunków błędu, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, jest ustawione na EINVAL , errno a funkcje zwracają wartość EINVAL.

Uwagi

Funkcja _mktemp_s tworzy unikatową nazwę pliku, modyfikując nameTemplate argument, tak aby po wywołaniu nameTemplate wskaźnik wskazywał ciąg zawierający nową nazwę pliku. _mktemp_s 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_s jest wersją szerokoznakową ; _mktemp_sargument argument _wmktemp_s jest ciągiem o szerokim znaku. _wmktemp_s i _mktemp_s zachowują się identycznie inaczej, z tą różnicą, że _wmktemp_s nie obsługuje ciągów wielobajtowych znaków.

Wersje biblioteki debugowania tych funkcji najpierw wypełniają bufor 0xFE. Aby wyłączyć to zachowanie, użyj polecenia _CrtSetDebugFillThreshold.

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_s _mktemp_s _mktemp_s _wmktemp_s

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 _mktemp_selement . Każdy symbol zastępczy w nameTemplate elemencie musi być wielkimi literami X. _mktemp_s zachowuje base i zastępuje pierwszy końcowy znak X znakiem alfabetycznym. _mktemp_s Zamienia znaki X, które następują po nim, na wartość pięciocyfrową. 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ę _mktemp_snameTemplate. W każdym kolejnym wywołaniu z tego samego procesu lub wątku z tym samym nameTemplate argumentem _mktemp_s sprawdza nazwy plików, które pasują do nazw zwracanych przez _mktemp_s w poprzednich wywołaniach. Jeśli żaden plik nie istnieje dla danej nazwy, _mktemp_s zwraca tę nazwę. Jeśli pliki istnieją dla wszystkich poprzednio zwracanych nazw, tworzy nową nazwę, _mktemp_s 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_s 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_s 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_s pliku, która może zostać utworzona dla base wartości i nameTemplate użytych w tym przykładzie.

W języku C++używanie tych funkcji jest uproszczone przez przeciążenia szablonu; przeciążenia mogą automatycznie wnioskować długość buforu (eliminując konieczność określenia argumentu rozmiaru) i mogą automatycznie zastępować starsze, niezabezpieczone funkcje nowszymi, bezpiecznymi odpowiednikami. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.

Wymagania

Procedura Wymagany nagłówek
_mktemp_s <io.h>
_wmktemp_s <io.h> lub <wchar.h>

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

Przykład

// crt_mktemp_s.cpp
/* The program uses _mktemp to create
* five unique filenames. It opens each filename
* to ensure that the next name is unique.
*/

#include <io.h>
#include <string.h>
#include <stdio.h>

char *fnTemplate = "fnXXXXXX";
char names[5][9];

int main()
{
   int i, err, sizeInChars;
   FILE *fp;

   for( i = 0; i < 5; i++ )
   {
      strcpy_s( names[i], sizeof(names[i]), fnTemplate );
      /* Get the size of the string and add one for the null terminator.*/
      sizeInChars = strnlen(names[i], 9) + 1;
      /* Attempt to find a unique filename: */
      err = _mktemp_s( names[i], sizeInChars );
      if( err != 0 )
         printf( "Problem creating the template" );
      else
      {
         if( fopen_s( &fp, names[i], "w" ) == 0 )
            printf( "Unique filename is %s\n", names[i] );
         else
            printf( "Cannot open %s\n", names[i] );
         fclose( fp );
      }
   }

   return 0;
}

Przykładowe dane wyjściowe

Unique filename is fna03188
Unique filename is fnb03188
Unique filename is fnc03188
Unique filename is fnd03188
Unique filename is fne03188

Zobacz też

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