อธิบายวิธีที่โปรแกรมเมอร์ภาษา C สร้าง เปิด และปิดไฟล์ข้อความหรือไฟล์ไบนารี
ไฟล์ หมายถึงชุดของไบต์ ไม่ว่าจะเป็นไฟล์ข้อความหรือไฟล์ไบนารี ภาษา C ไม่เพียงแต่ให้การเข้าถึงฟังก์ชันระดับบนสุดเท่านั้น แต่ยังให้การเรียก (OS) พื้นฐานเพื่อประมวลผลไฟล์บนอุปกรณ์จัดเก็บข้อมูลด้วย . บทนี้จะอธิบายการเรียกที่สำคัญในการจัดการเอกสาร
เปิดไฟล์
โดยปกติแล้วการใช้ฟังก์ชัน fopen () เพื่อสร้างไฟล์ใหม่หรือเปิดไฟล์ที่มีอยู่ การเรียกนี้จะเตรียมใช้งานออบเจ็กต์ประเภท FILE ซึ่งมีข้อมูลที่จำเป็นทั้งหมดเพื่อควบคุมโฟลว์ นี่คือต้นแบบของการเรียกใช้ฟังก์ชันนี้:
ไฟล์ *fopen ( const char * ชื่อไฟล์ , const char * โหมด );
ชื่อไฟล์ในที่นี้เป็นสตริงสำหรับตั้งชื่อไฟล์ ค่าของโหมดการเข้าถึงสามารถเป็นหนึ่งในค่าต่อไปนี้:
ลวดลาย | คำอธิบาย |
r | เปิดไฟล์ข้อความที่มีอยู่ซึ่งอนุญาตให้อ่านได้ |
w | เปิดไฟล์ข้อความที่สามารถเขียนลงในไฟล์ได้ หากไม่มีไฟล์อยู่ ไฟล์ใหม่จะถูกสร้างขึ้น ที่นี่ โปรแกรมของคุณเขียนเนื้อหาตั้งแต่ต้นไฟล์ หากมีไฟล์อยู่ ไฟล์นั้นจะถูกตัดให้มีความยาวเป็นศูนย์แล้วเขียนใหม่ |
a | เปิดไฟล์ข้อความและเขียนลงในไฟล์ในโหมดผนวก หากไม่มีไฟล์อยู่ ไฟล์ใหม่จะถูกสร้างขึ้น ที่นี่ โปรแกรมของคุณจะผนวกเนื้อหาเข้ากับไฟล์ที่คุณมีอยู่แล้ว |
r+ | เปิดไฟล์ข้อความที่ให้คุณอ่านและเขียนไฟล์ได้ |
w+ | เปิดไฟล์ข้อความที่ให้คุณอ่านและเขียนไฟล์ได้ หากไฟล์มีอยู่แล้ว ไฟล์จะถูกตัดทอนให้มีความยาวเป็นศูนย์ และหากไม่มีไฟล์อยู่ ไฟล์ใหม่จะถูกสร้างขึ้น |
a+ | เปิดไฟล์ข้อความที่ให้คุณอ่านและเขียนไฟล์ได้ หากไม่มีไฟล์อยู่ ไฟล์ใหม่จะถูกสร้างขึ้น การอ่านเริ่มต้นที่จุดเริ่มต้นของไฟล์ และการเขียนจะอยู่ในโหมดผนวกเท่านั้น |
หากประมวลผลไฟล์ไบนารีแล้ว ให้ใช้โหมดการเข้าถึงต่อไปนี้เพื่อแทนที่ข้างต้น:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
ไฟล์ปิด
หากต้องการปิดไฟล์ โปรดใช้ฟังก์ชัน fclose() ต้นแบบของฟังก์ชันมีดังนี้:
int fclose ( ไฟล์ *fp );
- หากปิดไฟล์สำเร็จ ฟังก์ชัน fclose() จะส่งคืนศูนย์ และหากข้อผิดพลาดส่งคืน EOF ที่จริงแล้วฟังก์ชันนี้จะลบข้อมูลออกจากบัฟเฟอร์ ปิดไฟล์ และปล่อยหน่วยความจำทั้งหมดที่ใช้สำหรับไฟล์นั้น EOF เป็นค่าคงที่ที่กำหนดไว้ในไฟล์ส่วนหัว stdio.h
ไลบรารีมาตรฐาน C มีฟังก์ชันต่างๆ ในการอ่านและเขียนไฟล์ด้วยอักขระหรือเป็นสตริงที่มีความยาวคงที่
เขียนลงในไฟล์
ต่อไปนี้เป็นฟังก์ชันที่ง่ายที่สุดในการเขียนอักขระลงในสตรีม:
int fputc ( int c , FILE *fp );
ฟังก์ชัน fputc () เขียนค่าอักขระของพารามิเตอร์ c ลงในเอาต์พุตสตรีมที่ fp ชี้ไป หากการเขียนสำเร็จ จะส่งคืนอักขระที่เขียนและ EOF หากเกิดข้อผิดพลาด คุณสามารถใช้ฟังก์ชันต่อไปนี้เพื่อเขียนสตริงที่ลงท้ายด้วยค่าว่างลงในสตรีม:
int fputs ( const ถ่าน *s , FILE *fp );
ฟังก์ชัน fputs () เขียนสตริง s ไปยังเอาต์พุตสตรีมโดยที่ fp ชี้ไป หากเขียนสำเร็จ จะส่งคืนค่าที่ไม่เป็นลบและส่งกลับ EOF หากเกิดข้อผิดพลาด คุณยังสามารถใช้ฟังก์ชัน int fprintf (FILE * fp, const char * format,...) เขียนสตริงลงในไฟล์ได้ ลองตัวอย่างต่อไปนี้:
หมายเหตุ: ตรวจสอบให้แน่ใจว่าคุณมีไดเร็กทอรี tmp ที่พร้อมใช้งาน และหากไม่มีอยู่ คุณจะต้องสร้างไดเร็กทอรีบนคอมพิวเตอร์ของคุณก่อน
/tmp มักจะเป็นไดเร็กทอรีชั่วคราวบนระบบ Linux หากคุณทำงานบนระบบ Windows คุณจะต้องแก้ไขเป็นไดเร็กทอรีที่มีอยู่ในสภาพแวดล้อมภายในเครื่อง เช่น: C: \ tmp, D: \ tmp เป็นต้น
ตัวอย่างการใช้ชีวิต
#รวม
เมื่อโค้ดด้านบนถูกคอมไพล์และดำเนินการ มันจะสร้างไฟล์ใหม่ test.txt ในไดเร็กทอรี / tmp และเขียนเป็นสองบรรทัดโดยใช้สองฟังก์ชันที่แตกต่างกัน มาอ่านไฟล์นี้กันต่อไป
อ่านไฟล์
ต่อไปนี้เป็นฟังก์ชันที่ง่ายที่สุดในการอ่านอักขระตัวเดียวจากไฟล์:
int fgetc ( ไฟล์ * fp );
ฟังก์ชั่น fgetc () อ่านอักขระจากไฟล์อินพุตที่ fp ชี้ ค่าที่ส่งคืนคืออักขระการอ่านและ EOF หากเกิดข้อผิดพลาด ฟังก์ชั่นต่อไปนี้ช่วยให้คุณอ่านสตริงจากสตรีม:
ถ่าน *fgets ( ถ่าน *buf , int n , FILE *fp );
ฟังก์ชั่น fgets () อ่านอักขระ n-1 จากสตรีมอินพุตที่กำกับโดย fp คัดลอกสตริงการอ่านไปยังบัฟเฟอร์ buf และต่อท้ายอักขระ null ที่ส่วนท้ายเพื่อยุติสตริง
หากฟังก์ชันนี้พบอักขระบรรทัดที่ขาด '\ n' หรือ EOF ที่ส่วนท้ายของไฟล์ก่อนที่จะอ่านอักขระตัวสุดท้าย จากนั้นจะส่งคืนเฉพาะอักขระที่อ่านเท่านั้น รวมถึงการขึ้นบรรทัดใหม่ด้วย คุณยังสามารถใช้ฟังก์ชัน int fscanf (FILE * fp, const char * format,...) เพื่ออ่านสตริงจากไฟล์ แต่จะหยุดอ่านเมื่อพบช่องว่างแรกและตัวแบ่งบรรทัด
ตัวอย่างการใช้ชีวิต
#รวม
เมื่อโค้ดด้านบนถูกคอมไพล์และดำเนินการ มันจะอ่านไฟล์ที่สร้างขึ้นในส่วนก่อนหน้า โดยให้ผลลัพธ์ดังต่อไปนี้:
1: 2 นี้: กำลังทดสอบ fprintf...
3: นี่คือการทดสอบ fputs...
ขั้นแรก วิธีการของ fscanf() จะอ่านเฉพาะ This . เนื่องจากพบช่องว่างด้านหลัง ประการที่สอง เรียก functon fgets () เพื่ออ่านส่วนที่เหลือจนจบบรรทัด สุดท้ายให้เรียก fgets () เพื่ออ่านแถวที่สองให้ครบถ้วน
ฟังก์ชันไบนารี I / O
สองฟังก์ชันต่อไปนี้ใช้สำหรับอินพุตและเอาต์พุตไบนารี:
size_t fread (โมฆะ *ptr , size_t size_of_elements , size_t number_of_elements , FILE *a_file ); size_t fwrite (const โมฆะ *ptr , size_t size_of_elements , size_t number_of_elements , FILE *a_file );
ทั้งสองฟังก์ชันอ่านและเขียนสำหรับบล็อกหน่วยเก็บข้อมูล ซึ่งโดยปกติจะเป็นอาร์เรย์หรือโครงสร้าง
ข้างต้นเกี่ยวกับการอ่านและการเขียนไฟล์ C เป็นของ HDV Phoelectron Technology Ltd. ซึ่งเป็นการดำเนินการทางเทคนิคของซอฟต์แวร์ และบริษัทจำหน่ายอุปกรณ์ที่เกี่ยวข้องกับโครงข่าย (เช่น ACสอท/ การสื่อสารสอท/ ฉลาดสอท/ไฟเบอร์สอทฯลฯ) ได้รวบรวมทีมซอฟต์แวร์ที่มีประสิทธิภาพ สำหรับลูกค้าทุกรายที่ปรับแต่งความต้องการพิเศษเฉพาะที่ต้องการ และยังช่วยให้ผลิตภัณฑ์ของเรามีความชาญฉลาดและล้ำสมัยมากขึ้น