_mktemp, _wmktemp

Membuat nama file yang unik. Versi yang lebih aman dari fungsi-fungsi ini tersedia; lihat _mktemp_s, _wmktemp_s.

Sintaks

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

Parameter

nameTemplate
Pola nama file.

Nilai hasil

Masing-masing fungsi ini mengembalikan penunjuk ke nameTemplate yang dimodifikasi. Fungsi mengembalikan NULL jika nameTemplate dibentuk dengan buruk atau tidak ada lagi nama unik yang dapat dibuat dari nameTemplate yang diberikan.

Keterangan

Fungsi ini _mktemp membuat nama file unik dengan memodifikasi nameTemplate argumen. _mktemp secara otomatis menangani argumen string multibyte-character yang sesuai, mengenali urutan karakter multibyte sesuai dengan halaman kode multibyte yang saat ini digunakan oleh sistem run-time. _wmktemp adalah versi karakter yang luas dari _mktemp; argumen dan nilai yang dikembalikan adalah _wmktemp string karakter lebar. _wmktemp dan _mktemp bertingkah identik jika tidak, kecuali yang _wmktemp tidak menangani string multibyte-character.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Pemetaan rutin teks generik

Rutinitas Tchar.h _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_tmktemp _mktemp _mktemp _wmktemp

Argumen nameTemplate memiliki formulir baseXXXXXX, di mana base adalah bagian dari nama file baru yang Anda berikan dan setiap X adalah tempat penampung untuk karakter yang disediakan oleh _mktemp. Setiap karakter tempat penampung harus nameTemplate berupa huruf besar X. _mktemp mempertahankan base dan mengganti X berikutnya dengan karakter alfabet. _mktemp mengganti karakter X berikutnya dengan nilai lima digit. Nilai ini adalah nomor unik yang mengidentifikasi proses panggilan, atau dalam program multithreaded, utas panggilan.

Setiap panggilan yang berhasil untuk _mktemp memodifikasi nameTemplate. Dalam setiap panggilan berikutnya dari proses atau utas yang sama dengan argumen yang sama nameTemplate , _mktemp memeriksa nama file yang cocok dengan nama yang dikembalikan oleh _mktemp dalam panggilan sebelumnya. Jika tidak ada file untuk nama tertentu, _mktemp mengembalikan nama tersebut. Jika file ada untuk semua nama yang dikembalikan sebelumnya, _mktemp buat nama baru dengan mengganti karakter alfabet yang digunakan dalam nama yang dikembalikan sebelumnya dengan huruf kecil berikutnya yang tersedia, secara berurutan, dari 'a' hingga 'z'. Misalnya, jika base adalah:

fn

dan nilai lima digit yang disediakan adalah _mktemp 12345, nama depan yang dikembalikan adalah:

fna12345

Jika nama ini digunakan untuk membuat file FNA12345 dan file ini masih ada, nama berikutnya yang dikembalikan pada panggilan dari proses atau utas yang sama dengan yang sama base untuk nameTemplate adalah:

fnb12345

Jika FNA12345 tidak ada, nama berikutnya yang dikembalikan adalah lagi:

fna12345

_mktemp dapat membuat maksimal 26 nama file unik untuk kombinasi base nilai dan nameTemplate yang diberikan. Oleh karena itu, FNZ12345 adalah nama _mktemp file unik terakhir yang dapat dibuat untuk nilai dan nameTemplate yang base digunakan dalam contoh ini.

Jika gagal, errno diatur. Jika nameTemplate memiliki format yang tidak valid (misalnya, kurang dari enam karakter X), errno diatur ke EINVAL. Jika _mktemp tidak dapat membuat nama unik karena semua 26 nama file yang mungkin sudah ada, _mktemp atur nameTemplate ke string kosong dan mengembalikan EEXIST.

Di C++, fungsi-fungsi ini memiliki kelebihan beban templat yang memanggil rekan-rekan yang lebih baru dan aman dari fungsi-fungsi ini. Untuk informasi selengkapnya, lihat Mengamankan kelebihan beban templat.

Persyaratan

Rutin Header yang diperlukan
_mktemp <io.h>
_wmktemp <io.h> atau <wchar.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// 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.

Baca juga

Penanganan file
fopen, _wfopen
_getmbcp
_getpid
_open, _wopen
_setmbcp
_tempnam, _wtempnam, tmpnam, _wtmpnam
tmpfile