Tulis Fail Binari dalam C++

Tulis Fail Binari Dalam C



Dalam pengaturcaraan C++, berurusan dengan fail binari adalah asas untuk menyimpan dan memanipulasi data mentah. Sama ada anda bekerja dengan imej, fail audio atau struktur data tersuai, keupayaan untuk menulis fail binari dengan cekap adalah penting. Fail binari menyimpan data dalam format yang tidak boleh dibaca manusia, menjadikannya sesuai untuk pelbagai aplikasi seperti menyimpan struktur kompleks, imej atau sebarang data yang tidak mengikut perwakilan berasaskan teks yang ringkas.

C++ menyediakan perpustakaan untuk berinteraksi dengan fail binari, terutamanya kelas 'ofstream', untuk menulis data binari. Keupayaan ini membolehkan pembangun mencipta, mengubah suai dan mengurus fail binari dengan lancar. Artikel ini meneroka pelbagai kaedah dan teknik untuk menulis fail binari dalam C++, memberi penerangan tentang aplikasi dan kes penggunaannya.

Tulis Fail Binari Menggunakan C++

Untuk menyimpan data ke dalam fail binari menggunakan C++, kaedah write() digunakan. Fungsi ini menulis bilangan bait yang ditentukan ke strim yang ditetapkan, bermula di lokasi penuding 'letak'. Jika penunjuk 'put' berada di hujung, fail dilanjutkan. Walau bagaimanapun, data baharu akan menimpa aksara sedia ada jika penunjuk berada dalam fail. Sekiranya berlaku ralat semasa proses penulisan, strim ditandakan sebagai berada dalam keadaan ralat. Sekarang, mari kita beralih kepada contoh untuk mempelajari cara menulis dalam fail binari menggunakan beberapa fungsi C++ yang mudah dan terbina dalam.







Kaedah 1: Menulis Fail Perduaan dengan Data Berstruktur

Anda mungkin perlu menulis data berstruktur, seperti struktur tersuai, ke fail binari dalam banyak kes. Mari kita pertimbangkan contoh yang mengandungi rekod seseorang yang merangkumi nama, ketinggian dan umur seseorang. Lihat kod yang diberikan berikut dan lihat penjelasannya:



#include

#include

struct Orang {

char nama [ lima puluh ] ;

int umur ;

berganda ketinggian ;

} ;

int utama ( ) {

std :: ofstream outFile ( 'people.bin' , std :: ios :: binari ) ;

jika ( ! outFile. ia terbuka ( ) ) {

std :: cerr << 'Ralat! Tidak dapat membuka fail untuk menulis!' << std :: endl ;

kembali 1 ;

}

Orang orang1 = { 'Kalsoom Ilyas' , 25 , 1.75 } ;

Orang orang2 = { 'Kalsoom Bajwa' , 30 , 1.68 } ;

outFile. menulis ( reinterpret_cast < char *> ( & orang 1 ) , saiz ( orang 1 ) ) ;

outFile. menulis ( reinterpret_cast < char *> ( & orang2 ) , saiz ( orang2 ) ) ;

outFile. dekat ( ) ;

std :: cout << 'Rekod orang itu ditulis ke fail binari dengan jayanya.' << std :: endl ;

kembali 0 ;

}

Berikut ialah pecahan kod dengan butiran khusus. Program ini bermula dengan mentakrifkan struktur tersuai bernama 'Orang'. Ia mempunyai tiga medan: nama, umur dan ketinggian. Butiran medan ini adalah seperti berikut:



  • nama: Rentetan untuk menyimpan nama orang itu (sehingga 50 aksara)
  • umur: Integer untuk menyimpan umur orang itu
  • ketinggian: Ganda untuk menyimpan ketinggian orang itu

Selepas mentakrifkan struktur 'Orang', fungsi utama bermula iaitu titik masuk program. Baris pertama dalam program utama membuka fail bernama 'people.bin'. Kami menggunakan 'std::ofstream' untuk mencipta fail bernama 'people.bin' untuk menulis data dalam format binari. Memeriksa sama ada fail dibuka dengan jayanya adalah sangat penting. Jika tidak, mesej ralat ditunjukkan dan program berhenti. Oleh itu, dengan bantuan keadaan 'jika' dan fungsi is_open(), kami menyemak sama ada fail telah dibuka dengan jayanya atau tidak.





Di sini, dua objek 'Orang' dicipta. Kami mentakrifkan dua pembolehubah, 'orang1' dan 'orang2', daripada jenis 'Orang'. Kami menetapkan nama pembolehubah, umur dan nilai ketinggian untuk 'Kalsoom Ilyas' dan 'Kalsoom Bajwa'.

Sekarang kita mempunyai data untuk ditulis dalam fail binari, mari kita melaksanakan fungsi sebenar dengan fungsi write(). Kami menggunakan 'outFile.write' untuk menulis kandungan setiap objek 'Orang' pada fail. “reinterpret_cast(&person1)” dan “reinterpret_cast(&person2)” menukar keseluruhan struktur “Orang” (termasuk semua medannya) ke dalam aliran bait berterusan yang sesuai untuk menulis ke fail binari . Kami menulis saiz setiap objek 'Orang' menggunakan 'saiz(orang1)' dan 'saiz(orang2)' untuk memastikan semua data ditulis dengan betul.



Selepas menulis data pada fail, adalah sangat penting untuk menutupnya dengan betul supaya tiada data akan hilang disebabkan oleh sebarang fungsi lain. Kami menggunakan outFile.close() untuk mengeluarkan sumber yang dikaitkan dengan fail dan memastikan bahawa data ditulis dengan tepat. Akhir sekali, kami mencetak mesej yang mengesahkan penulisan data yang berjaya ke fail binari.

Jika kami menerangkan contoh ini dalam istilah yang lebih mudah, bayangkan buku nota khas yang hanya boleh menyimpan maklumat tentang orang dalam bahasa rahsia. Kod ini mencipta pelan tindakan untuk menyusun maklumat (nama, umur, ketinggian). Ia membuka buku nota, mengisi profil untuk dua orang, menterjemah maklumat ke dalam bahasa rahsia, dan menulisnya dengan kemas di dalamnya. Ia kemudian menutup buku nota dengan selamat, mengekalkan profil untuk kegunaan masa hadapan. Rujuk kepada output program yang diberikan dalam petikan berikut:

Kaedah 2: Menulis Integer ke Fail Binari

Dalam kaedah ini, tatasusunan integer ditulis pada fail binari bernama 'integers.bin'. “reinterpret_cast” merawat tatasusunan integer sebagai jujukan aksara (bait) untuk menulis ke dalam fail. Ini amat penting kerana fail binari berurusan dengan data bait mentah. Mari kita lihat contoh mudah berikut:

#include

#include

int utama ( ) {

std :: ofstream outFile ( 'integers.bin' , std :: ios :: binari ) ;

jika ( ! outFile. ia terbuka ( ) ) {

std :: cerr << 'Ralat! Tidak dapat membuka fail untuk menulis!' << std :: endl ;

kembali 1 ;

}

int nombor [ ] = { 42 , 99 , - 1 , 0 } ;

outFile. menulis ( reinterpret_cast < char *> ( nombor ) , saiz ( nombor ) ) ;

outFile. dekat ( ) ;

std :: cout << 'Integer yang diberikan ditulis ke fail binari dengan jayanya.' << std :: endl ;

kembali 0 ;

}

Berikut ialah pecahan kod dengan butiran khusus:

“#include ” dan “#include ” membawa masuk alatan yang diperlukan untuk bekerja dengan fail dan mencetak mesej seperti cin dan write(), masing-masing. “std::ofstream outFile(“integers.bin”, std::ios::binary);” membuka fail binari bernama 'integers.bin' yang hanya boleh menyimpan nombor dalam kod rahsia (format binari). Ia menyemak sama ada fail dibuka. Jika tidak, mesej ralat diberikan.

Baris seterusnya iaitu “int numbers[] = {42, 99, -1, 0};” mentakrifkan tatasusunan bernama 'nombor' dengan integer 42, 99, -1 dan 0. 'outFile.write(reinterpret_cast(numbers), sizeof(numbers));' menterjemah integer dengan teliti ke dalam format binari dan menulisnya dalam fail 'integer.bin'. 'outFile.close();' menutup fail dengan betul untuk memastikan integer selamat dan teratur. Akhir sekali, mesej dicetak untuk mengesahkan bahawa integer telah berjaya disimpan dalam fail binari. Rujuk output program ini berikut untuk melihat hasilnya:

Kesimpulan

Menulis fail binari dalam C++ ialah kemahiran penting untuk mengendalikan pelbagai jenis data dengan cekap. Dalam penerokaan menulis fail binari dalam C++ ini, kami telah mempelajari cara kelas 'ofstream' boleh digunakan untuk mengendalikan data binari dengan cekap. Sama ada berurusan dengan integer mudah atau data berstruktur menggunakan struktur tersuai, proses itu melibatkan membuka aliran fail, menulis data dalam format binari dan kemudian menutup fail. Keupayaan ini memberikan kelonggaran kepada pembangun C++ untuk bekerja dengan pelbagai jenis data binari, menyumbang kepada kepelbagaian bahasa dalam aplikasi yang terdiri daripada pengaturcaraan peringkat sistem kepada pemprosesan multimedia.