_tempnam
, _wtempnam
, tmpnam
, _wtmpnam
Hasilkan nama yang dapat Anda gunakan untuk membuat file sementara. Versi yang lebih aman dari beberapa fungsi ini tersedia; lihat tmpnam_s
, _wtmpnam_s
.
Sintaks
char *_tempnam(
const char *dir,
const char *prefix
);
wchar_t *_wtempnam(
const wchar_t *dir,
const wchar_t *prefix
);
char *tmpnam(
char *str
);
wchar_t *_wtmpnam(
wchar_t *str
);
Parameter
prefix
String yang ditambahkan sebelumnya ke nama yang dikembalikan oleh _tempnam
.
dir
Jalur yang digunakan dalam nama file jika tidak ada variabel lingkungan TMP, atau jika TMP bukan direktori yang valid.
str
Penunjuk yang menyimpan nama yang dihasilkan, identik dengan nama yang dikembalikan oleh fungsi. Ini adalah cara mudah untuk menyimpan nama yang dihasilkan.
Nilai hasil
Masing-masing fungsi ini mengembalikan penunjuk ke nama yang dihasilkan atau NULL
jika ada kegagalan. Kegagalan dapat terjadi jika Anda mencoba lebih dari TMP_MAX
(lihat STDIO. H) memanggil dengan tmpnam
atau jika Anda menggunakan _tempnam
dan ada nama direktori yang tidak valid yang ditentukan dalam TMP
variabel lingkungan dan dalam dir
parameter .
Catatan
Penunjuk dikembalikan oleh tmpnam
dan _wtmpnam
menunjuk ke buffer statis internal. free
tidak boleh dipanggil untuk membatalkan alokasi pointer tersebut. free
perlu dipanggil untuk pointer yang dialokasikan oleh _tempnam
dan _wtempnam
.
Keterangan
Masing-masing fungsi ini mengembalikan nama file yang saat ini tidak ada. tmpnam
mengembalikan nama yang unik dalam direktori sementara Windows yang ditunjuk yang dikembalikan oleh GetTempPathW
. _tempnam
menghasilkan nama unik dalam direktori selain yang ditunjuk. Ketika nama file didahului dengan garis miring terbalik dan tidak ada informasi jalur, seperti \fname21
, itu menunjukkan bahwa nama tersebut valid untuk direktori kerja saat ini.
Untuk tmpnam
, Anda dapat menyimpan nama file yang dihasilkan ini di str
. Jika str
adalah NULL
, maka tmpnam
meninggalkan hasilnya dalam buffer statis internal. Dengan demikian setiap panggilan berikutnya menghancurkan nilai ini. Nama yang dihasilkan oleh tmpnam
terdiri dari nama file yang dihasilkan program dan, setelah panggilan pertama ke tmpnam
, ekstensi file nomor berurutan di basis 32 (.1-.vvu, ketika TMP_MAX
di STDIO. H adalah 32.767).
_tempnam
menghasilkan nama file unik untuk direktori yang dipilih oleh aturan berikut:
Jika variabel lingkungan TMP ditentukan dan diatur ke nama direktori yang valid, nama file unik dihasilkan untuk direktori yang ditentukan oleh TMP.
Jika variabel lingkungan TMP tidak ditentukan atau jika diatur ke nama direktori yang tidak ada,
_tempnam
gunakandir
parameter sebagai jalur yang menghasilkan nama unik.Jika variabel lingkungan TMP tidak ditentukan atau jika diatur ke nama direktori yang tidak ada, dan jika
dir
berupaNULL
atau diatur ke nama direktori yang tidak ada,_tempnam
menggunakan direktori kerja saat ini untuk menghasilkan nama unik. Saat ini, jika TMP dandir
menentukan nama direktori yang tidak ada, panggilan fungsi _tempnam gagal.
Nama yang dikembalikan oleh _tempnam
adalah perangkaian dan prefix
angka berurutan, yang digabungkan untuk membuat nama file unik untuk direktori yang ditentukan. _tempnam
menghasilkan nama file yang tidak memiliki ekstensi. _tempnam
malloc
menggunakan untuk mengalokasikan ruang untuk nama file; program bertanggung jawab untuk membebaskan ruang ini ketika tidak lagi diperlukan.
_tempnam
dan tmpnam
secara otomatis menangani argumen string karakter multibyte yang sesuai, mengenali urutan karakter multibyte sesuai dengan halaman kode OEM yang diperoleh dari sistem operasi. _wtempnam
adalah versi karakter yang luas dari _tempnam
; argumen dan nilai yang dikembalikan adalah _wtempnam
string karakter lebar. _wtempnam
dan _tempnam
bertingkah identik kecuali yang _wtempnam
tidak menangani string multibyte-character. _wtmpnam
adalah versi karakter yang luas dari tmpnam
; argumen dan nilai yang dikembalikan adalah _wtmpnam
string karakter lebar. _wtmpnam
dan tmpnam
bertingkah identik kecuali yang _wtmpnam
tidak menangani string multibyte-character.
Jika _DEBUG
dan _CRTDBG_MAP_ALLOC
didefinisikan, _tempnam
dan _wtempnam
digantikan oleh panggilan ke _tempnam_dbg
dan _wtempnam_dbg
.
Pemetaan rutin teks generik
TCHAR. Rutinitas H | _UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_ttmpnam |
tmpnam |
tmpnam |
_wtmpnam |
_ttempnam |
_tempnam |
_tempnam |
_wtempnam |
Persyaratan
Rutin | Header yang diperlukan |
---|---|
_tempnam |
<stdio.h> |
_wtempnam , _wtmpnam |
<stdio.h> atau <wchar.h> |
tmpnam |
<stdio.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// temporary directory, and _tempname to create a unique filename
// in C:\\tmp.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char * name1 = NULL;
char * name2 = NULL;
char * name3 = NULL;
// Create a temporary filename for the current working directory:
if ((name1 = tmpnam(NULL)) != NULL) { // C4996
// Note: tmpnam is deprecated; consider using tmpnam_s instead
printf("%s is safe to use as a temporary file.\n", name1);
} else {
printf("Cannot create a unique filename\n");
}
// Create a temporary filename in temporary directory with the
// prefix "stq". The actual destination directory may vary
// depending on the state of the TMP environment variable and
// the global variable P_tmpdir.
if ((name2 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name2);
} else {
printf("Cannot create a unique filename\n");
}
// When name2 is no longer needed:
if (name2) {
free(name2);
}
// Unset TMP environment variable, then create a temporary filename in C:\tmp.
if (_putenv("TMP=") != 0) {
printf("Could not remove TMP environment variable.\n");
}
// With TMP unset, we'll use C:\tmp as the temporary directory.
// Create a temporary filename in C:\tmp with prefix "stq".
if ((name3 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name3);
}
else {
printf("Cannot create a unique filename\n");
}
// When name3 is no longer needed:
if (name3) {
free(name3);
}
return 0;
}
C:\Users\LocalUser\AppData\Local\Temp\sriw.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\stq2 is safe to use as a temporary file.
c:\tmp\stq3 is safe to use as a temporary file.
Baca juga
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