Menambahkan Satu File ke File Lain
Contoh kode dalam topik ini menunjukkan kepada Anda cara membuka dan menutup file, membaca dan menulis ke file, serta mengunci dan membuka kunci file.
Dalam contoh, aplikasi menambahkan satu file ke akhir file lain. Pertama, aplikasi membuka file yang ditambahkan dengan izin yang hanya memungkinkan aplikasi untuk menulisnya. Namun, selama proses penambahan, proses lain dapat membuka file dengan izin baca-saja, yang menyediakan tampilan rekam jepret file yang ditambahkan. Kemudian, file dikunci selama proses penambalan aktual untuk memastikan integritas data yang ditulis ke file.
Contoh ini tidak menggunakan transaksi. Jika Anda menggunakan operasi yang ditransaksikan, Anda hanya akan dapat memiliki akses baca-saja. Dalam hal ini, Anda hanya akan melihat data yang ditambahkan setelah operasi penerapan transaksi selesai.
Contohnya juga menunjukkan bahwa aplikasi membuka dua file dengan menggunakan CreateFile:
- One.txt dibuka untuk dibaca.
- Two.txt dibuka untuk menulis dan membaca bersama.
Kemudian aplikasi menggunakan ReadFile dan WriteFile untuk menambahkan konten One.txt ke akhir Two.txt dengan membaca dan menulis blok 4 KB. Namun, sebelum menulis ke file kedua, aplikasi menggunakan SetFilePointer untuk mengatur penunjuk file kedua ke akhir file tersebut, dan menggunakan LockFile untuk mengunci area yang akan ditulis. Ini mencegah utas atau proses lain dengan handel duplikat mengakses area saat operasi tulis sedang berlangsung. Ketika setiap operasi tulis selesai, UnlockFile digunakan untuk membuka kunci area terkunci.
#include <windows.h>
#include <stdio.h>
void main()
{
HANDLE hFile;
HANDLE hAppend;
DWORD dwBytesRead, dwBytesWritten, dwPos;
BYTE buff[4096];
// Open the existing file.
hFile = CreateFile(TEXT("one.txt"), // open One.txt
GENERIC_READ, // open for reading
0, // do not share
NULL, // no security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template
if (hFile == INVALID_HANDLE_VALUE)
{
printf("Could not open one.txt.");
return;
}
// Open the existing file, or if the file does not exist,
// create a new file.
hAppend = CreateFile(TEXT("two.txt"), // open Two.txt
FILE_APPEND_DATA | FILE_GENERIC_READ, // open for appending and locking
FILE_SHARE_READ, // allow multiple readers
NULL, // no security
OPEN_ALWAYS, // open or create
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template
if (hAppend == INVALID_HANDLE_VALUE)
{
printf("Could not open two.txt.");
return;
}
// Append the first file to the end of the second file.
// Lock the second file to prevent another process from
// accessing it while writing to it. Unlock the
// file when writing is complete.
while (ReadFile(hFile, buff, sizeof(buff), &dwBytesRead, NULL)
&& dwBytesRead > 0)
{
dwPos = SetFilePointer(hAppend, 0, NULL, FILE_END);
if (!LockFile(hAppend, dwPos, 0, dwBytesRead, 0))
{
printf("Could not lock two.txt");
}
WriteFile(hAppend, buff, dwBytesRead, &dwBytesWritten, NULL);
UnlockFile(hAppend, dwPos, 0, dwBytesRead, 0);
}
// Close both files.
CloseHandle(hFile);
CloseHandle(hAppend);
}
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