ไฟล์ไบนารี วิธีอ่านไฟล์ไบนารี่

การทำงานกับไฟล์ไบนารี

ข้อมูลทั้งหมดจะถูกเก็บไว้ในคอมพิวเตอร์ในรูปแบบ 0 และ 1 เช่น ในรูปแบบไบนารี ไฟล์ไบนารีแตกต่างจากไฟล์ข้อความเฉพาะในวิธีการทำงานกับไฟล์เหล่านั้น ตัวอย่างเช่น หากเราเขียนตัวเลข “4” ลงในไฟล์ข้อความ ไฟล์นั้นจะถูกเขียนเป็นอักขระ และจำเป็นต้องใช้หนึ่งไบต์ในการจัดเก็บ ดังนั้นขนาดไฟล์จะเท่ากับหนึ่งไบต์ ไฟล์ข้อความที่มีรายการ: "145687" จะมีขนาดหกไบต์

หากเราเขียนจำนวนเต็ม 145,687 ลงในไฟล์ไบนารี่ จะมีขนาด 4 ไบต์ เนื่องจากนั่นคือจำนวนที่จำเป็นในการจัดเก็บข้อมูล int นั่นคือไฟล์ไบนารี่มีขนาดกะทัดรัดกว่าและในบางกรณีก็ประมวลผลได้ง่ายกว่า

การเขียนชนิดข้อมูลมาตรฐานลงในไฟล์ไบนารี

หากต้องการเปิดไฟล์ไบนารี คุณต้องตั้งค่าโหมดการเข้าถึงเป็น ios::binary (ในคอมไพเลอร์ C++ บางตัว ios::bin)

หากต้องการสร้างไฟล์เอาต์พุต ให้สร้างอ็อบเจ็กต์:

ofstream outBinFile("out.bin", ios::out | ios::binary);

/* การสร้างวัตถุคลาสของกระแส ออก. ถังขยะ

ถ้า (! out_f ฉัน 1) //การตรวจสอบมาตรฐาน

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

ตัวอย่างที่ 1เขียนตัวแปรประเภทต่าง ๆ ลงในไฟล์ไบนารี:

ofstream outBinFile("test.bin", ios::out I

iOS: :binary) ; /^การสร้างวัตถุคลาสของกระแส และพยายามเชื่อมโยงมันเข้ากับไฟล์ทดสอบ. ถังขยะ ในโหมดการเขียนไฟล์ไบนารี */

อินท์เอ - 145687; //การประกาศตัวแปรทั้งหมด

ออกBinFi le. เขียน ((ถ่าน*) &a, ขนาดของ (a)) ; /^เขียนลงไฟล์

ตัวแปรเป็นกระแสข้อมูลไบต์ เช่น การเขียนลงในไฟล์เพื่อเป็นตัวแทนภายในของตัวแปรทั้งหมดก */ ลอย x - 123.25; - การประกาศตัวแปรที่แท้จริงเอ็กซ์

outBinFile .write ((อักขระ*) &x, ขนาดของ (x)); /^เขียนลงไฟล์

ตัวแปรเอ็กซ์ เป็นกระแสข้อมูลไบต์ เช่น การเขียนลงในไฟล์เพื่อเป็นตัวแทนภายในของตัวแปรทั้งหมด x*/

//คำจำกัดความของตัวแปรสัญลักษณ์กับ และเริ่มต้นด้วยสัญลักษณ์ g outBinFile.write((ถ่าน*)&c, ขนาดของ(c));

//บันทึกสัญลักษณ์เพื่อยื่น

outBinFile.close(); กลับ 0;

หากคุณเปิดเนื้อหาของไฟล์ทดสอบ .bin ด้วยโปรแกรมแก้ไขข้อความ มันจะมีลักษณะดังนี้:

และขนาดไฟล์จะเป็น 9 ไบต์

การอ่านชนิดข้อมูลมาตรฐานจากไฟล์ไบนารี

หากต้องการเปิดไฟล์ไบนารี่ที่มีอยู่เพื่ออ่าน คุณต้องสร้างอ็อบเจ็กต์:

ifstream inpBinFile("inp.bin", ios::in I ios::binary);

/* เราใช้การแยกแฟล็กเพื่อระบุว่าไฟล์ถูกเปิดเพื่ออ่านในรูปแบบไบนารี */

ถ้า (! inpBinFile)

coutหากต้องการอ่านข้อมูล เราใช้ฟังก์ชัน read() ซึ่งมีพารามิเตอร์คล้ายกับฟังก์ชัน write()

#include การใช้เนมสเปซมาตรฐาน; int หลัก()

ifstream inpBinFile("test.bin", ios::in I

iOS::ไบนารี่); - /เปิดไฟล์เพื่ออ่านในรูปแบบไบนารี่

อินท์เอ; ลอย x; ถ่านค = "g";

inpBinFile.read((ถ่าน*)&a, ขนาดของ(a));

// อ่านตัวแปรจำนวนเต็ม inpBinFile.read((ถ่าน*)&x, ขนาดของ(x));

//อ่านตัวแปรจริง inpBinFile.read((ถ่าน*)&c, ขนาดของ (c));

// อ่านตัวแปรสัญลักษณ์

inpBinFile.close(); ศาล

ผลลัพธ์ของโปรแกรม:

ก = 145687 x = 123.25 วิ = ก

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

การเขียนและการอ่านชนิดข้อมูลที่กำหนดเองไปยังไฟล์ไบนารี

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

นอกจากนี้ เมื่อทำงานกับไฟล์ไบนารี สามารถใช้เมธอด seekg(), tellg(), Seep(), tellp() ได้

ตัวอย่างที่ 3เขียนโปรแกรมที่เขียนข้อมูลเกี่ยวกับกลุ่มนักท่องเที่ยวเป็นไฟล์ไบนารี

fstream BinFile("ankety.bin", ios::in I ios::out | ios::binary);

อังเคต้า กรัปปา = ; สำหรับ (int i = 0; i

BinFile.write((char*)&Gruppa[i], sizeof(Anketa)); BinFile.close(); กลับ 0;

ตัวอย่างที่ 4ไฟล์ “ankety.bin” มีข้อมูลเกี่ยวกับกลุ่มนักท่องเที่ยว จำเป็นต้องอ่านและแสดงบนหน้าจอ

#include การใช้เนมสเปซมาตรฐาน; แบบสอบถามโครงสร้าง (

ชื่อถ่าน; อายุจริง;

ชนิดข้อมูลโครงสร้างแบบสอบถาม ไปที่หน้าจอ*/

ostream และตัวดำเนินการ

fstream BinFile("ankety.bin", ios::in | ios::out | ios::binary); ถ้า (!BinFile)

สำหรับ (int i = 0; i

//อ่านไบต์ทั้งหมดที่ถูกครอบครองโดยตัวแปรประเภททันที Anketa BinFile.read((char*)&Gruppa[i], sizeof(Anketa));

BinFile.close(); กลับ 0;

ผลลัพธ์ของโปรแกรม:

อิวานอฟ, 23 ซิโดรอฟ, 21 เปตรอฟ,22

หากต้องการดำเนินการต่อ ให้กดปุ่มใดก็ได้ - -

การพัฒนาคลาสของคุณเองสำหรับการทำงานกับไฟล์

ไม่สะดวกที่จะใช้วิธีการเขียน () และอ่าน () อย่างต่อเนื่อง การใช้การดำเนินการ ">" โดยการเปรียบเทียบกับไฟล์ข้อความจะสะดวกกว่ามาก เรามายกตัวอย่างการใช้คลาสของเราเพื่อทำงานกับไฟล์ไบนารี่

ใช้เนมสเปซมาตรฐาน;

แบบสอบถามโครงสร้าง //ประกาศโครงสร้างการจัดเก็บข้อมูล

/*โอเวอร์โหลดการดำเนินการแทรกลงในสตรีมสำหรับเอาต์พุตแบบกำหนดเอง

ชนิดข้อมูลโครงสร้างแบบสอบถาม ไปที่หน้าจอ*/

ostream และตัวดำเนินการ

คลาส outBinaryFile: public ของกระแส /^กำหนดคลาสของเราสำหรับการทำงานกับไฟล์ไบนารีเอาท์พุต เราได้รับมาจากคลาสสำหรับการทำงานกับสตรีมไฟล์เอาต์พุต */

/*เมื่ออธิบายคอนสตรัคเตอร์ของคลาสที่สร้างขึ้น อย่าลืมเรียกคอนสตรัคเตอร์ของคลาสฐาน โดยส่งพารามิเตอร์ที่จำเป็น*/

outBinaryFile(ชื่อถ่าน*) : ofstream(ชื่อ, ios::out I ios::binary)

//โอเวอร์โหลดการดำเนินการที่จำเป็นเป็นวิธีการเรียน outBinaryFile& ตัวดำเนินการ

write((char*)&chislo, sizeof(chislo)); กลับ *สิ่งนี้;

outBinaryFile& ตัวดำเนินการ

เขียน((ถ่าน*)&ank, ขนาดของ(ank)); กลับ *สิ่งนี้;

คลาส inpBinaryFile: สาธารณะถ้าสตรีม /* เรากำหนดคลาสของเราสำหรับการทำงานกับไฟล์ไบนารีอินพุต เราได้รับมาจากคลาสสำหรับการทำงานกับสตรีมไฟล์อินพุต */

inpBinaryFile(ชื่อถ่าน*) : ifstream(ชื่อ, ios::in I ios::binary)

/*เรียกตัวสร้างคลาสฐานพร้อมพารามิเตอร์ที่จำเป็น

เพียงพอสำหรับคอนสตรัคเตอร์ของคลาสที่ได้รับ */

//โอเวอร์โหลดการดำเนินการที่จำเป็น

inpBinaryFile& ตัวดำเนินการ >> (int & หมายเลข)

อ่าน((ถ่าน*)&chislo, ขนาดของ(chislo)); กลับ *สิ่งนี้;

inpBinaryFile& ตัวดำเนินการ >> (Anketa& ank)

อ่าน((ถ่าน*)&ank, ขนาดของ(ank)); กลับ *สิ่งนี้;

int ก = 111, b = 112; outBinaryFile outFile("dannye.bin");

//เปิดไฟล์เพื่ออ่าน

inpBinaryFile inpFile("dannye.bin"); ถ้า (!inpFile)

สำหรับ (int i = 0; i

inpFile >> ก; //อ่านโปรไฟล์จากไฟล์

cout // และแสดงมันบนหน้าจอ

inpFile >> แบบสอบถาม; ศาล

ผลลัพธ์ของโปรแกรม:

โคลยา 1990, 582-78-95.

หากต้องการดำเนินการต่อ ให้กดปุ่มใดก็ได้ - -

1. สามารถใช้การดำเนินการในโปรแกรมได้หรือไม่?

ios::ใน และ ios::ออก

  • ก) ใช่ ไม่ว่าในกรณีใด
  • b) ใช่ แต่เมื่อทำงานกับไฟล์ข้อความเท่านั้น
  • c) ไม่ ไม่ว่าในกรณีใด
  • 2. ระบุตัวเลือกที่ถูกต้องสำหรับการเปิดไฟล์ข้อความสำหรับการอ่าน:
    • ก) ifstream inpF("input.txt", ios::in);
    • b) ifstream inpF("input.txt", ios::input);
    • ค) ifstream inpF(ios:in, "input.txt")

H. สิ่งที่จะปรากฏบนหน้าจออันเป็นผลมาจากการรันโค้ดต่อไปนี้?

inputFile.get(c);

ถัดไป - inputFile.peek();

ถ้า (ถัดไป == EOF)

  • ก) เนื้อหาของไฟล์ที่เกี่ยวข้องกับสตรีม inputFile จะปรากฏบนหน้าจอหนึ่งครั้ง
  • b) เนื้อหาของไฟล์ที่เกี่ยวข้องกับสตรีม inputFile จะปรากฏบนหน้าจอเป็นจำนวนไม่สิ้นสุด;
  • c) ไม่มีสิ่งใดปรากฏบนหน้าจอ
  • 4. ในไฟล์มีอักขระกี่ตัว?
  • 12 3 4 5 6
  • ก) 6;
  • ข) 7;
  • ค) 11.
  • 5. วิธีใดที่ช่วยให้คุณระบุจุดสิ้นสุดของไฟล์ได้?
  • ก) อีฟ();
  • ข) ดี();
  • c) ทั้งสองวิธีนี้
  • 6. ฟังก์ชัน getline() มีไว้เพื่ออะไร?
  • ก) อ่านคำจากไฟล์
  • b) อ่านเนื้อหาทั้งหมดของไฟล์
  • c) อ่านบรรทัดจากไฟล์
  • 7. หากต้องการเขียน/อ่านประเภทข้อมูลที่กำหนดเองลงในไฟล์ คุณต้อง:
    • ก) โอเวอร์โหลดการดำเนินการ ">>" และ "
    • b) ประเภทข้อมูลการเขียนและการอ่านที่กำหนดเองสามารถใช้ได้โดยไม่ต้องดำเนินการเพิ่มเติม
    • c) การเขียนและการอ่านประเภทข้อมูลที่กำหนดเองลงในไฟล์เป็นไปไม่ได้
  • 8. ฟังก์ชันใดที่ใช้เขียน/อ่านข้อมูลในรูปแบบไบนารี่?
  • ก) printf / scanf;
  • ข) เขียน / อ่าน;
  • c) ใส่ / รับ
  • 1. เขียนโปรแกรมที่เขียนตัวอักษรภาษาอังกฤษลงในไฟล์
  • 2. ไฟล์ input.txt มีข้อมูลจากบรรทัดข้อความหลายบรรทัด แสดงเนื้อหาของไฟล์นี้บนหน้าจอ นับจำนวนบรรทัดในไฟล์
  • 3. ดิสก์มีไฟล์ result.txt พร้อมผลการทดลองทางเคมี เขียนโปรแกรมที่สร้างสำเนาของไฟล์ชื่อ copy_resylt.txt
  • 4. ป้อนชื่อไฟล์โดยใช้แป้นพิมพ์ ลบบรรทัดคู่ทั้งหมดในไฟล์ที่ระบุ
  • 5. เขียนโปรแกรมที่แทนที่อักษรตัวพิมพ์เล็กทั้งหมดด้วยตัวพิมพ์ใหญ่ในไฟล์ข้อความ และในทางกลับกัน
  • 6. ไฟล์ข้อความต้นฉบับประกอบด้วยตัวเลขที่คั่นด้วยช่องว่าง สร้างไฟล์ใหม่สองไฟล์: ไฟล์แรกควรมีเพียงตัวเลขคู่และไฟล์ที่สอง - คี่
  • 7. ไฟล์นี้มีตัวเลขจริง เขียนโปรแกรมโดยละเศษส่วนของตัวเลขเหล่านี้ออกแล้วเขียนลงในไฟล์ใหม่
  • 8. ไฟล์ข้อความประกอบด้วยข้อมูลเกี่ยวกับเที่ยวบินของสายการบิน เลือกเที่ยวบินที่ออกเดินทางช่วงบ่ายจากข้อมูลนี้และแสดงบนหน้าจอ
  • 9. โอเวอร์โหลด >> และโอเปอเรเตอร์
  • 10. เขียนชั้นเรียนของคุณเองเพื่อทำงานกับไฟล์ไบนารี
  • 11. เขียนรายชื่อนักเรียน 10 คนในชั้นเรียนลงในไฟล์ข้อความและลงในไฟล์ไบนารี เปรียบเทียบไฟล์เหล่านี้ อธิบายความแตกต่างที่เกิดขึ้น
  • 12. พัฒนาคลาสที่เขียนข้อมูลเกี่ยวกับรถยนต์ (ปีที่ผลิต ยี่ห้อ สี ฯลฯ) ลงในไฟล์ข้อความ ในกรณีนี้ สัญลักษณ์ข้อมูลแต่ละรายการจะถูกแทนที่ด้วยรหัส ABO 1 ของตัวเอง แสดงไฟล์ผลลัพธ์บนหน้าจอ

คำถามเพื่อความปลอดภัย

  • 1. คลาสใดที่ใช้ในการทำงานกับสตรีมไฟล์?
  • 2. สามารถใช้โหมดการเข้าถึงใดเมื่อทำงานกับไฟล์? ยกตัวอย่าง.
  • 3. ใช้วิธีใดในการเปิดไฟล์? ยกตัวอย่าง.
  • 4. มีการดำเนินการใดบ้างสำหรับการทำงานกับไฟล์? มีฟังก์ชันอะไรบ้างในการดำเนินการเหล่านี้?
  • 5. วิธีใดที่อนุญาตให้คุณระบุจุดสิ้นสุดของไฟล์เมื่ออ่านข้อมูลจากไฟล์นั้น? ความแตกต่างระหว่างวิธีการเหล่านี้คืออะไร? ยกตัวอย่าง.
  • 6. คุณจะอ่านตัวแปรของประเภทข้อมูลมาตรฐานจากไฟล์ข้อความได้อย่างไร?
  • 7. เป็นไปได้ไหมที่จะอ่านตัวแปรประเภทข้อมูลที่กำหนดเองจากไฟล์ข้อความ?
  • 8. ฟังก์ชั่นใดบ้างที่ได้รับการออกแบบมาเพื่อสุ่มอ่านข้อมูลจากไฟล์? ยกตัวอย่าง.
  • 9. ตั้งชื่อคุณสมบัติของไฟล์ไบนารี ข้อดีของการใช้ไฟล์ดังกล่าวคืออะไร?
  • 10. ฟังก์ชันใดที่สามารถใช้เพื่อเขียน/อ่านข้อมูลลงในไฟล์ไบนารี่ได้?
  • 11. จะอ่านตัวแปรประเภทข้อมูลมาตรฐานจากไฟล์ไบนารี่ได้อย่างไร?
  • 12. ข้อควรพิจารณาใดบ้างที่ต้องนำมาพิจารณาเมื่ออ่านประเภทข้อมูลที่กำหนดเองจากไฟล์ไบนารี?
  • "อีวานอฟ", 23), ("ซิโดรอฟ", 21),

ไฟล์ไบนารีคือไฟล์ใดๆ ในคอมพิวเตอร์ของคุณ ข้อมูลทั้งหมดบนคอมพิวเตอร์และสื่อที่เกี่ยวข้องจะถูกบันทึกเป็นบิต (จึงเป็นที่มาของชื่อ) อย่างไรก็ตามสำหรับการเปรียบเทียบ ไฟล์ข้อความสามารถอ่านได้ในโปรแกรมอ่านที่เกี่ยวข้องกับส่วนขยาย (ไฟล์ที่ง่ายที่สุด - แม้ใน Notepad) แต่ไฟล์ปฏิบัติการไม่สามารถทำได้ และแม้ว่าในความเป็นจริงแล้วไฟล์ txt จะเป็นไฟล์ไบนารี่เดียวกัน แต่เมื่อพูดถึงปัญหาในการเปิดเนื้อหาของไฟล์ไบนารี่ พวกเขาหมายถึงไฟล์ที่ปฏิบัติการได้ตลอดจนข้อมูลที่บีบอัด

คุณจะต้อง

  • - โปรแกรมแก้ไข Hex

คำแนะนำ

  • ดาวน์โหลดโปรแกรม Hex Edit ลงในฮาร์ดไดรฟ์ของคุณ - โปรแกรมแก้ไขไฟล์ที่แสดงเนื้อหาในรูปแบบไบนารี เปิดโปรแกรมโดยดับเบิลคลิกที่ไฟล์เริ่มต้น ซอฟต์แวร์นี้ช่วยให้คุณอ่านไฟล์ไบนารี่แบบเรียลไทม์ เปลี่ยนแปลงเนื้อหา เพิ่มรายการของคุณเอง และอื่นๆ อีกมากมาย หากต้องการทำงานอย่างเต็มที่ในสภาพแวดล้อมนี้ คุณจำเป็นต้องรู้เพียงเล็กน้อยเกี่ยวกับแนวคิดทั่วไปของไฟล์ไบนารี
  • หน้าต่างโปรแกรมไม่แตกต่างจากโปรแกรมแก้ไขทั่วไปมากนัก: เมนูที่คุ้นเคยและแผงพร้อมปุ่ม, เนื้อความของไฟล์ที่กำลังแก้ไข, บุ๊กมาร์กและแถบสถานะ เปิดไฟล์ไบนารีผ่านเมนูไฟล์หรือคลิกที่ไอคอนที่เกี่ยวข้องบนแผงควบคุม ไฟล์ไบนารี่จะปรากฏต่อหน้าคุณในรูปแบบของสตริงที่มีตัวเลขและตัวอักษร อย่าสับสนระหว่างอักขระเหล่านี้กับข้อมูลที่พิมพ์ในไฟล์ข้อความ คุณยังสามารถแก้ไขได้โดยการลบอักขระ แต่ในกรณีนี้ คุณจะลบเซลล์ที่มีข้อมูล ชิ้นส่วนของไฟล์
  • ทำการเปลี่ยนแปลงเนื้อหาของไฟล์ แอปพลิเคชันสามารถแสดงส่วนสำคัญของไฟล์เพื่อให้ค้นหาได้ง่ายขึ้น และยังมีการตั้งค่าที่ยืดหยุ่นสำหรับการแสดงรหัสไบนารี่แบบกราฟิก สลับมุมมองเนื้อหาเป็นโหมด ASCII+IBM/OEM เพื่อดูโค้ดของไฟล์ หากคุณป้อนบรรทัดที่ไม่ถูกต้องลงในไฟล์ ไฟล์นั้นอาจทำงานไม่ถูกต้อง ส่งผลร้ายแรงต่อระบบปฏิบัติการของคอมพิวเตอร์ส่วนบุคคลของคุณ
  • บันทึกการเปลี่ยนแปลงของคุณ หากคุณไม่มีประสบการณ์ในการแก้ไขไฟล์ประเภทนี้ ให้เตรียมพร้อมสำหรับความจริงที่ว่าไฟล์จะไม่เปิดขึ้นและปฏิเสธที่จะทำงานหลังจากทำการเปลี่ยนแปลง คุณอาจจะเลอะสำเนาสองสามชุดก่อนที่จะทำถูกต้อง พยายามอย่าบันทึกการเปลี่ยนแปลงทั้งหมดในไฟล์ต้นฉบับเพื่อให้เนื้อหาไม่เปลี่ยนแปลง
  • คำอธิบายและการนำเสนอไฟล์ภายใน

    ไฟล์จะแตกต่างกัน ไฟล์ทั้งหมดที่จัดเก็บไว้ในคอมพิวเตอร์มีคุณสมบัติพิเศษ เช่น วิธีการอธิบายพิเศษที่อนุญาตให้คุณแยกแยะไฟล์หนึ่งจากอีกไฟล์หนึ่ง: 1) ชื่อ; 2)ขนาด; 3) วันที่และเวลา 4)ไอคอน

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

    แต่ละไฟล์มีขนาดทางกายภาพ ไฟล์นี้ใช้หน่วยความจำคอมพิวเตอร์และพื้นที่ดิสก์บางส่วน

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

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

    ขนาดไฟล์วัดเป็นไบต์ เช่นเดียวกับความจุของหน่วยความจำ

    ขนาดไฟล์อาจเป็น 0 ไบต์ ซึ่งหมายความว่ามีไฟล์อยู่แต่ไม่มีอะไรเลย S ขนาดไฟล์สูงสุดคือ 4 GB แต่ไฟล์ขนาดใหญ่เช่นนี้หายากมาก

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

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

    ไฟล์ข้อความและไบนารี

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

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

    ในไบนารี่ เอ็กซ์ไฟล์ข้อมูลถูกอ่านและเขียนในรูปแบบของบล็อกขนาดที่กำหนดซึ่งสามารถจัดเก็บข้อมูลประเภทและโครงสร้างใดก็ได้

    หากต้องการทำงานกับไฟล์ชนิดข้อมูลพิเศษที่เรียกว่า ลำธารสตรีม ifstream ใช้เพื่อทำงานกับไฟล์ในโหมดอ่าน และ ifstream ถูกใช้ในโหมดเขียน ในการทำงานกับไฟล์ทั้งในโหมดการเขียนและการอ่าน จะใช้สตรีม ifstream

    ในโปรแกรม C++ เมื่อทำงานกับไฟล์ข้อความ คุณต้องรวมไลบรารี ifstream และ iostream ไว้ด้วย

    ในการเขียนข้อมูลลงในไฟล์ข้อความ คุณต้อง: 1) อธิบายตัวแปรประเภท ของกระแส เปิด- 3) ข้อมูลส่งออกไปยังไฟล์; 4) อย่าลืมปิดไฟล์

    หากต้องการอ่านข้อมูลจากไฟล์ข้อความ คุณต้อง:

    1) อธิบายตัวแปรประเภท ถ้าสตรีม- 2) เปิดไฟล์โดยใช้ฟังก์ชัน เปิด- 3) อ่านข้อมูลจากไฟล์ เมื่ออ่านข้อมูลแต่ละชิ้นจำเป็นต้องตรวจสอบว่าถึงจุดสิ้นสุดของไฟล์แล้วหรือไม่ 4) ปิดไฟล์

    ควรสังเกตว่าในตัวอย่างทั้งหมดที่กล่าวถึงข้างต้น ฟังก์ชัน fopen() ในโหมด “r” และ “w” จะเปิดไฟล์ข้อความสำหรับการอ่านและการเขียนตามลำดับ ซึ่งหมายความว่าอักขระการจัดรูปแบบข้อความบางตัว เช่น อักขระขึ้นบรรทัดใหม่ '\r' ไม่สามารถอ่านเป็นอักขระแยกกันได้ อาจไม่มีอยู่ในไฟล์ แต่มีอยู่ นี่คือคุณสมบัติของโหมดข้อความของไฟล์ ในการทำงานกับเนื้อหาไฟล์ที่ "ละเอียด" ยิ่งขึ้น มีโหมดไบนารี่ที่แสดงเนื้อหาไฟล์เป็นลำดับไบต์ โดยที่โค้ดควบคุมที่เป็นไปได้ทั้งหมดเป็นเพียงตัวเลข ในโหมดนี้คุณสามารถลบหรือเพิ่มอักขระควบคุมที่ไม่สามารถใช้งานได้ในโหมดข้อความได้ เพื่อเปิดไฟล์ในโหมดไบนารี่ ฟังก์ชัน fopen() ยังใช้กับพารามิเตอร์สุดท้ายเท่ากับ "rb" และ "wb" ตามลำดับสำหรับการอ่านและการเขียน

    ไฟล์. นอกจากนี้ จากมุมมองของการใช้งานทางเทคนิคในระดับฮาร์ดแวร์ ไฟล์ข้อความเป็นกรณีพิเศษของไฟล์ไบนารี่ และด้วยเหตุนี้ ในความหมายกว้างๆ ไฟล์ใดๆ ก็ตามจึงเข้าข่ายคำจำกัดความของ "ไฟล์ไบนารี"

    โดยทั่วไป คำนี้แสดงถึงการวัดความสัมพันธ์ระหว่างผู้ใช้ไฟล์ไบนารี่และตัวไฟล์เอง หากผู้บริโภคทราบโครงสร้างและกฎเกณฑ์ที่เขาสามารถแปลงไฟล์ที่กำหนดให้เป็นไฟล์ระดับที่สูงกว่าได้ ก็แสดงว่าไฟล์นั้นไม่ใช่ไบนารี่สำหรับเขา ตัวอย่างเช่น ไฟล์ปฏิบัติการเป็นไบนารี่สำหรับผู้ใช้คอมพิวเตอร์ แต่ไม่ใช่ไบนารี่สำหรับระบบปฏิบัติการ - ]

    การแสดงภาพ

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

    ออคเต็ต จำนวนบิต เลขฐานสิบหก ฐานแปด ทศนิยม
    ไม่ได้ลงนาม
    ทศนิยม
    สัญลักษณ์
    1 8 00

    เอฟเอฟ
    000

    377
    0

    255
    -128

    127
    2 16 0000

    FFFF
    000000

    177777
    0

    65535
    -32768

    32767
    4 32 00000000

    ฟฟฟฟฟฟ
    00000000000

    37777777777
    0

    4294967295
    -2147483648

    2147483647

    บ่อยครั้ง นอกจากค่าไบต์ตัวเลขแล้ว อักขระโค้ดเพจ เช่น ASCII ก็ยังถูกส่งออกด้วยเช่นกัน ตัวอย่างต่อไปนี้แสดงให้เห็นสิ่งที่เรียกว่า การถ่ายโอนข้อมูลแบบคลาสสิก(การแสดงเลขฐานสิบหก octet-by-octet ขนาด 16 ไบต์ต่อบรรทัด โดยมีอักขระ ASCII ที่พิมพ์ได้ทางด้านขวา) ของจุดเริ่มต้นของไฟล์ PNG ของโลโก้ Wikipedia:

    00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 87 00 00 00 a0 08 03 00 00 00 11 90 8f |............| 00000020 b6 00 00 00 04 67 41 4d 41 00 00 d6 d8 d4 4f 58 | ..... gAMA ..... OX | 00000030 32 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 |2....tEXtSoftwar| 00000040 65 00 41 64 6f 62 65 20 49 6d 61 67 65 52 65 61 |e. Adobe ImageRea| 00000050 64 79 71 c9 65 3c 00 00 03 00 50 4c 54 45 22 22 | dyq.e<....PLTE""| 00000060 22 56 56 56 47 47 47 33 33 33 30 30 30 42 42 42 |"VVVGGG333000BBB| 00000070 4b 4b 4b 40 40 40 15 15 15 4f 4f 4f 2c 2c 2c 3c |KKK@@@...OOO,<| 00000080 3c 3c 3e 3e 3e 3a 39 39 04 04 04 1d 1d 1d 35 35 |<<>>>:99......55| 00000090 35 51 50 50 37 37 37 11 11 11 25 25 25 0d 0d 0d |5QPP777...%%%...| 000000a0 27 27 27 1a 1a 1a 38 38 38 2a 2a 2a 08 08 08 20 |"""...888**... | 000000b0 20 20 17 17 17 2e 2e 2e 13 13 13 bb bb bb 88 88 | . ............|

    เครื่องมือ

    สำหรับการมองเห็น

    • แก้ไขข้อบกพร่อง (บน Microsoft Windows บางส่วน)
    • hexdump (บน FreeBSD, GNU/Linux ฯลฯ)

    สำหรับการแก้ไข

    • โปรแกรมแก้ไข HEX
      • beye (สำหรับระบบปฏิบัติการทั้งหมด, ซอฟต์แวร์ฟรี)
      • สวัสดี (สำหรับ DOS, Microsoft Windows, Windows NT)
      • WinHex (สำหรับวินโดวส์)

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

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

    ทฤษฎีเล็กน้อย

    ไฟล์ข้อความประกอบด้วยอักขระ ASCII (ตัวย่อย่อมาจาก American Standard Code for Information Interchange หรือบางอย่างเช่น "American Standard Code for Information Interchange")

    ในความเป็นจริง ASCII เป็นตารางที่แต่ละตัวอักษร ตัวเลข เครื่องหมายวรรคตอน และ "สุนัข" ต่างๆ ที่มี "เกล็ดหิมะ" (ในความหมายของ @ และ *) ได้รับการจัดสรรหนึ่งไบต์ นั่นคือศูนย์แปดตัวและหนึ่ง (บิต) นอกจากนี้ แน่นอนว่าควบคุมตัวละครอย่างขึ้นบรรทัดใหม่ได้ด้วย

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

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

    คำว่า "ไบนารี" นั้นหมายถึง "ประกอบด้วยสององค์ประกอบ" "สองเท่า" อันที่จริงมีความเป็นไปได้ที่จะกำหนดองค์ประกอบเพียงสองส่วนอย่างชัดเจน - ศูนย์และหนึ่งบิต "อิฐ" ซึ่งประกอบด้วยไฟล์ ความหมายของทุกสิ่งทุกอย่างสามารถปรากฏได้เฉพาะในระหว่างการเริ่มต้นเท่านั้น (การเปิด, การเล่น)

    ด้านที่ผิดของโลกดิจิทัล

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

    ตัวอย่างเช่น ไบต์ของรูปภาพในรูปแบบ JPEG รูปภาพหรือภาพถ่ายปกติ จะแสดงในหน้าต่างตัวแก้ไขเป็น FF D8 FF 00 04 3A 29 เป็นต้น

    ผู้เชี่ยวชาญจะเข้าใจว่าลำดับของไบต์ FF D8 ที่จุดเริ่มต้นบ่งชี้ว่านี่คือ JPEG แต่ทั้งหมดนี้ไม่น่าสนใจสำหรับผู้ที่ไม่ใช่ผู้เชี่ยวชาญ

    คุณยังสามารถเปิดไฟล์ข้อความในตัวแก้ไข HEX เพื่อดูว่าไบต์ใดตรงกับตัวอักษรเฉพาะ (อักขระ ASCII) แต่ด้วยความอยากรู้เท่านั้นจึงยังไม่มีประเด็นในนั้น

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

    สิ่งที่สามารถทำร้ายได้

    ไฟล์ข้อความไม่สามารถมีสิ่งอื่นใดนอกจากอักขระ ASCII อย่างไรก็ตาม โปรแกรมไม่ได้เป็นเพียงไบนารี่เท่านั้น แต่ยังประกอบด้วยสัญลักษณ์ข้างต้นด้วย ฉันหมายถึงสคริปต์แน่นอน

    กล่าวอีกนัยหนึ่ง ไฟล์ *txt ไม่ได้ติดไวรัสโดยหลักการ และไม่ก่อให้เกิดภัยคุกคาม และหากมีสคริปต์อยู่ในไฟล์ข้อความก็อาจทำให้เกิดปัญหาได้มากมาย

    ตัวอย่างเช่น ไฟล์ *bat มีโค้ดของคำสั่งต่างๆ และเปิดขึ้นโดยการดับเบิลคลิก เช่นเดียวกับโปรแกรมทั่วไป คำสั่งเหล่านั้นเขียนด้วยอักขระ ASCII แต่ระบบปฏิบัติการรู้วิธีการตีความคำสั่งเหล่านั้น - เปลี่ยนให้เป็นศูนย์และเป็นคำสั่งทั่วไปสำหรับโปรแกรม

    แต่แน่นอนว่าคุณไม่คลิกไฟล์ค้างคาวที่ไม่รู้จักใช่ไหม ดีแล้ว.

    สิ่งพิมพ์ก่อนหน้า:

    แก้ไขครั้งสุดท้าย: 2012-11-06 14:45:16 น

    แท็กวัสดุ: ,