_mktemp_s, _wmktemp_s

Tworzy unikatową nazwę pliku.Są to wersje _mktemp, _wmktemp z rozszerzeń zabezpieczeń opisane w Funkcje zabezpieczeń w CRT.

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

Parametry

  • template
    Wzorzec nazwy pliku.

  • sizeInChars
    Rozmiar buforu w znaki jednobajtowe w _mktemp_s; szerokości znaków w _wmktemp_s, włączając null terminator.

Wartość zwracana

Obie te funkcje zwraca zero w przypadku powodzenia; Kod błędu w przypadku awarii.

Warunki błędów

template

sizeInChars

zwracanie wartości

nowe wartości w szablonie

NULL

wszelkie

EINVAL

NULL

Nieprawidłowy format (zobacz Remarks w sekcji poprawny format)

wszelkie

EINVAL

pusty ciąg znaków

wszelkie

< = liczba x

EINVAL

pusty ciąg znaków

Jeśli występuje którykolwiek z powyższych warunków błąd, nieprawidłowy parametr wywoływana jest funkcja obsługi, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie jest dozwolone, aby kontynuować, errno jest ustawiona na EINVAL i zwraca wartość funkcji EINVAL.

Uwagi

_mktemp_s Funkcja tworzy unikatową nazwę pliku, modyfikując template argument, tak aby po wywołaniu, template wskaźnik wskazuje ciąg zawierający nową nazwę pliku._mktemp_sautomatycznie 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._wmktemp_sjest to wersja szerokich znaków _mktemp_s; argument _wmktemp_s jest łańcuch szerokich znaków._wmktemp_si _mktemp_s zachowują się identycznie inaczej, z wyjątkiem _wmktemp_s 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_s

_mktemp_s

_mktemp_s

_wmktemp_s

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_s.Każdy znak symbolu zastępczego w template musi być wielkie litery X._mktemp_szachowuje base i zamienia pierwsze x końcowe znaku alfabetycznego._mktemp_szastę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_s modyfikuje template.W każdej kolejne wywołanie z tego samego procesu lub wątku z tym samym template argument, _mktemp_s sprawdza, czy nazwy plików, które odpowiadają nazwom zwrócony przez _mktemp_s w poprzedniego wywołania.Jeśli plik nie istnieje dla podanej nazwy _mktemp_s zwraca tę nazwę.Jeśli pliki znajdują się na wszystkie zwrócone wcześniej nazwy, _mktemp_s 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_s 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

_mktemp_smoż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_s można utworzyć dla base i template wartości używane w tym przykładzie.

W języku C++ korzystając z tych funkcji jest uproszczona poprzez overloads szablonu; overloads można automatycznie rozpoznać długość buforu (eliminując konieczność należy określić argument rozmiar) i automatycznie można zastąpić starszych, które nie są bezpieczne funkcje z ich odpowiednikami nowsze, bezpieczne.Aby uzyskać więcej informacji, zobacz Przeciążenia bezpiecznych szablonów.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

_mktemp_s

<io.h>

_wmktemp_s

<io.h> lub <wchar.h>

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

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

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_s