_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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk