เขียนไฟล์ไบนารีใน C ++

Kheiyn Fil Binari Ni C



ในการเขียนโปรแกรม C++ การจัดการกับไฟล์ไบนารีเป็นพื้นฐานในการจัดเก็บและจัดการข้อมูลดิบ ไม่ว่าคุณจะทำงานกับรูปภาพ ไฟล์เสียง หรือโครงสร้างข้อมูลที่กำหนดเอง ความสามารถในการเขียนไฟล์ไบนารี่อย่างมีประสิทธิภาพถือเป็นสิ่งสำคัญ ไฟล์ไบนารี่จัดเก็บข้อมูลในรูปแบบที่มนุษย์ไม่สามารถอ่านได้ ทำให้เหมาะสำหรับการใช้งานต่างๆ เช่น การจัดเก็บโครงสร้างที่ซับซ้อน รูปภาพ หรือข้อมูลใดๆ ที่ไม่เป็นไปตามการแสดงข้อความธรรมดา

C++ จัดให้มีไลบรารี เพื่อโต้ตอบกับไฟล์ไบนารี โดยเฉพาะคลาส 'ofstream' สำหรับการเขียนข้อมูลไบนารี ความสามารถนี้ช่วยให้นักพัฒนาสามารถสร้าง แก้ไข และจัดการไฟล์ไบนารี่ได้อย่างราบรื่น บทความนี้จะสำรวจวิธีการและเทคนิคต่างๆ ในการเขียนไฟล์ไบนารี่ในภาษา C++ โดยให้ความกระจ่างเกี่ยวกับแอปพลิเคชันและกรณีการใช้งาน

เขียนไฟล์ไบนารี่โดยใช้ C++

หากต้องการบันทึกข้อมูลลงในไฟล์ไบนารีโดยใช้ C ++ จะใช้วิธีการเขียน () ฟังก์ชันนี้เขียนตามจำนวนไบต์ที่ระบุไปยังสตรีมที่กำหนด โดยเริ่มต้นที่ตำแหน่งของตัวชี้ 'put' หากตัวชี้ “put” อยู่ท้ายไฟล์ แสดงว่าไฟล์ถูกขยาย อย่างไรก็ตาม ข้อมูลใหม่จะเขียนทับอักขระที่มีอยู่หากตัวชี้อยู่ในไฟล์ ในกรณีที่เกิดข้อผิดพลาดระหว่างขั้นตอนการเขียน สตรีมจะถูกทำเครื่องหมายว่าอยู่ในสถานะมีข้อผิดพลาด ตอนนี้ มาดูตัวอย่างเพื่อเรียนรู้วิธีเขียนในไฟล์ไบนารี่โดยใช้ฟังก์ชัน C++ ที่เรียบง่ายและมีอยู่แล้ว







วิธีที่ 1: การเขียนไฟล์ไบนารี่ด้วยข้อมูลที่มีโครงสร้าง

คุณอาจต้องเขียนข้อมูลที่มีโครงสร้าง เช่น โครงสร้างแบบกำหนดเอง ลงในไฟล์ไบนารีในหลายกรณี ลองพิจารณาตัวอย่างที่มีบันทึกของบุคคลซึ่งรวมถึงชื่อ ส่วนสูง และอายุของบุคคล ดูรหัสที่ระบุต่อไปนี้และดูคำอธิบาย:



#รวม

#รวม

โครงสร้าง บุคคล -

ถ่าน ชื่อ - ห้าสิบ - -

ภายใน อายุ -

สองเท่า ความสูง -

- -

ภายใน หลัก - - -

มาตรฐาน - ของกระแส outFile - 'คน.บิน' - มาตรฐาน - ไอโอเอส - ไบนารี่ - -

ถ้า - - outFile. เปิด - - - -

มาตรฐาน - เซอร์ - 'ข้อผิดพลาด! ไม่สามารถเปิดไฟล์เพื่อเขียนได้!' - มาตรฐาน - สิ้นสุด -

กลับ 1 -

-

คน คน1 - - “คัลซูม อิลยาส” - 25 - 1.75 - -

คน คน2 - - “คัลซูม บัจวา” - 30 - 1.68 - -

outFile. เขียน - ตีความใหม่_cast - ถ่าน - - - คนที่ 1 - - ขนาดของ - คนที่ 1 - - -

outFile. เขียน - ตีความใหม่_cast - ถ่าน - - - บุคคล2 - - ขนาดของ - บุคคล2 - - -

outFile. ปิด - - -

มาตรฐาน - ศาล - 'บันทึกของบุคคลนั้นถูกเขียนลงไบนารีไฟล์เรียบร้อยแล้ว' - มาตรฐาน - สิ้นสุด -

กลับ 0 -

-

นี่คือรายละเอียดของโค้ดพร้อมรายละเอียดเฉพาะ โปรแกรมเริ่มต้นด้วยการกำหนดโครงสร้างแบบกำหนดเองชื่อ “บุคคล” มีสามช่อง: ชื่อ อายุ และส่วนสูง รายละเอียดของฟิลด์เหล่านี้มีดังนี้:



  • ชื่อ: สตริงสำหรับจัดเก็บชื่อของบุคคล (สูงสุด 50 อักขระ)
  • อายุ: จำนวนเต็มเพื่อเก็บอายุของบุคคล
  • ความสูง: สองเท่าเพื่อเก็บความสูงของบุคคล

หลังจากกำหนดโครงสร้าง “บุคคล” แล้ว ฟังก์ชันหลักจะเริ่มทำงานซึ่งเป็นจุดเริ่มต้นของโปรแกรม บรรทัดแรกในโปรแกรมหลักจะเปิดไฟล์ชื่อ “people.bin” เราใช้ “std::ofstream” เพื่อสร้างไฟล์ชื่อ “people.bin” สำหรับการเขียนข้อมูลในรูปแบบไบนารี การตรวจสอบว่าไฟล์เปิดได้สำเร็จหรือไม่นั้นสำคัญมาก มิฉะนั้น ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้นและโปรแกรมหยุดทำงาน ดังนั้น ด้วยความช่วยเหลือของเงื่อนไข “if” และฟังก์ชัน is_open() เราจะตรวจสอบว่าไฟล์เปิดได้สำเร็จหรือไม่





ที่นี่วัตถุ 'บุคคล' ทั้งสองจะถูกสร้างขึ้น เรากำหนดตัวแปรสองตัวคือ 'person1' และ 'person2' ของประเภท 'Person' เรากำหนดค่าชื่อตัวแปร อายุ และส่วนสูงให้กับ 'Kalsoom Ilyas' และ 'Kalsoom Bajwa'

ตอนนี้เรามีข้อมูลที่จะเขียนในไฟล์ไบนารีแล้ว ให้เราดำเนินการฟังก์ชันจริงด้วยฟังก์ชัน write() เราใช้ 'outFile.write' เพื่อเขียนเนื้อหาของแต่ละวัตถุ 'บุคคล' ลงในไฟล์ “reตีความ_cast(&person1)” และ “reตีความ_cast(&person2)” แปลงโครงสร้าง “บุคคล” ทั้งหมด (รวมถึงฟิลด์ทั้งหมดด้วย) ให้เป็นสตรีมไบต์ที่ต่อเนื่องซึ่งเหมาะสำหรับการเขียนลงไฟล์ไบนารี . เราเขียนขนาดของวัตถุ “บุคคล” แต่ละรายการโดยใช้ “ขนาดของ (person1)” และ “ขนาดของ (person2)” เพื่อให้แน่ใจว่าข้อมูลทั้งหมดถูกเขียนอย่างถูกต้อง



หลังจากเขียนข้อมูลลงในไฟล์แล้ว สิ่งที่สำคัญมากคือต้องปิดมันอย่างถูกต้อง เพื่อไม่ให้ข้อมูลสูญหายเนื่องจากฟังก์ชันอื่นใด เราใช้ outFile.close() เพื่อเผยแพร่ทรัพยากรที่เกี่ยวข้องกับไฟล์และรับรองว่าข้อมูลจะถูกเขียนอย่างถูกต้อง สุดท้าย เราจะพิมพ์ข้อความที่ยืนยันว่าข้อมูลเขียนลงในไฟล์ไบนารี่ได้สำเร็จ

หากเราอธิบายตัวอย่างนี้ด้วยเงื่อนไขที่ง่ายกว่านี้ ลองจินตนาการถึงสมุดบันทึกพิเศษที่สามารถเก็บข้อมูลเกี่ยวกับบุคคลในภาษาลับเท่านั้น รหัสนี้สร้างพิมพ์เขียวสำหรับการจัดระเบียบข้อมูล (ชื่อ อายุ ส่วนสูง) โดยจะเปิดสมุดบันทึก กรอกโปรไฟล์ของคนสองคน แปลข้อมูลเป็นภาษาลับ และเขียนไว้ข้างในอย่างประณีต จากนั้นจะปิดโน้ตบุ๊กอย่างแน่นหนา เพื่อเก็บรักษาโปรไฟล์ไว้ใช้ในอนาคต อ้างถึงผลลัพธ์ของโปรแกรมที่ให้ไว้ในสแน็ปช็อตต่อไปนี้:

วิธีที่ 2: การเขียนจำนวนเต็มลงในไฟล์ไบนารี

ในวิธีนี้ อาร์เรย์ของจำนวนเต็มจะถูกเขียนลงในไฟล์ไบนารีชื่อ 'integers.bin' “reตีความ_cast” ถือว่าอาร์เรย์จำนวนเต็มเป็นลำดับของอักขระ (ไบต์) สำหรับการเขียนลงในไฟล์ สิ่งนี้สำคัญอย่างยิ่งเนื่องจากไฟล์ไบนารีจะจัดการกับข้อมูลไบต์ดิบ เรามาดูตัวอย่างง่ายๆ ดังต่อไปนี้:

#รวม

#รวม

ภายใน หลัก - - -

มาตรฐาน - ของกระแส outFile - 'จำนวนเต็ม.bin' - มาตรฐาน - ไอโอเอส - ไบนารี่ - -

ถ้า - - outFile. เปิด - - - -

มาตรฐาน - เซอร์ - 'ข้อผิดพลาด! ไม่สามารถเปิดไฟล์เพื่อเขียนได้!' - มาตรฐาน - สิ้นสุด -

กลับ 1 -

-

ภายใน ตัวเลข - - - - 42 - 99 - - 1 - 0 - -

outFile. เขียน - ตีความใหม่_cast - ถ่าน - - ตัวเลข - - ขนาดของ - ตัวเลข - - -

outFile. ปิด - - -

มาตรฐาน - ศาล - 'เขียนจำนวนเต็มที่กำหนดลงในไฟล์ไบนารี่สำเร็จ' - มาตรฐาน - สิ้นสุด -

กลับ 0 -

-

นี่คือรายละเอียดของโค้ดพร้อมรายละเอียดเฉพาะ:

“#include ” และ “#include ” มาพร้อมเครื่องมือที่จำเป็นสำหรับการทำงานกับไฟล์และการพิมพ์ข้อความ เช่น cin และ write() ตามลำดับ “std::ofstream outFile(“integers.bin”, std::ios::binary);” เปิดไฟล์ไบนารี่ชื่อ “integers.bin” ซึ่งสามารถจัดเก็บตัวเลขเป็นรหัสลับเท่านั้น (รูปแบบไบนารี) มันจะตรวจสอบว่าไฟล์เปิดอยู่หรือไม่ มิฉะนั้นจะได้รับข้อความแสดงข้อผิดพลาด

บรรทัดถัดไปซึ่งก็คือ “ตัวเลข int[] = {42, 99, -1, 0};” กำหนดอาร์เรย์ชื่อ 'ตัวเลข' ด้วยจำนวนเต็ม 42, 99, -1 และ 0 'outFile.write(reตีความ_cast(numbers), sizeof(numbers));' แปลจำนวนเต็มเป็นรูปแบบไบนารีอย่างระมัดระวังและเขียนลงในไฟล์ 'integer.bin' “outFile.close();” ปิดไฟล์อย่างถูกต้องเพื่อรักษาจำนวนเต็มให้ปลอดภัยและเป็นระเบียบ สุดท้าย ข้อความจะถูกพิมพ์เพื่อยืนยันว่าเก็บจำนวนเต็มไว้ในไฟล์ไบนารี่เรียบร้อยแล้ว อ้างถึงผลลัพธ์ต่อไปนี้ของโปรแกรมนี้เพื่อดูผลลัพธ์:

บทสรุป

การเขียนไฟล์ไบนารี่ในภาษา C++ ถือเป็นทักษะสำคัญในการจัดการข้อมูลประเภทต่างๆ ได้อย่างมีประสิทธิภาพ ในการสำรวจการเขียนไฟล์ไบนารี่ในภาษา C++ นี้ เราได้เรียนรู้วิธีการใช้งานคลาส “ofstream” เพื่อจัดการข้อมูลไบนารี่อย่างมีประสิทธิภาพ ไม่ว่าจะจัดการกับจำนวนเต็มธรรมดาหรือข้อมูลที่มีโครงสร้างโดยใช้โครงสร้างแบบกำหนดเอง กระบวนการเกี่ยวข้องกับการเปิดสตรีมไฟล์ การเขียนข้อมูลในรูปแบบไบนารี่ แล้วปิดไฟล์ ความสามารถนี้ทำให้นักพัฒนา C++ มีความยืดหยุ่นในการทำงานกับประเภทข้อมูลไบนารีที่หลากหลาย ซึ่งเอื้อต่อความคล่องตัวของภาษาในแอปพลิเคชันที่มีตั้งแต่การเขียนโปรแกรมระดับระบบไปจนถึงการประมวลผลมัลติมีเดีย