อธิบายวิธีที่โปรแกรมเมอร์ 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 , ไฟล์ *fp );
ฟังก์ชัน fputc () เขียนค่าอักขระของพารามิเตอร์ c ลงในเอาต์พุตสตรีมที่ fp ชี้ไปหากเขียนสำเร็จ จะส่งคืนอักขระที่เขียนและ EOF หากเกิดข้อผิดพลาดคุณสามารถใช้ฟังก์ชันต่อไปนี้เพื่อเขียนสตริงที่ลงท้ายด้วย null ไปยังสตรีม:
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 เป็นต้น
ตัวอย่างการใช้ชีวิต
#รวมint main () { ไฟล์ *fp = NULL ;fp = fopen("/tmp/test.txt ", "w+");fprintf (fp , "นี่คือการทดสอบ fprintf...\n ");fputs ("นี่คือการทดสอบ fputs...\n ", fp );fclose (fp );}
เมื่อโค้ดข้างต้นถูกคอมไพล์และเรียกใช้งาน มันจะสร้างไฟล์ใหม่ 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,...) เพื่ออ่านสตริงจากไฟล์ แต่จะหยุดอ่านเมื่อพบช่องว่างแรกและตัวแบ่งบรรทัด
ตัวอย่างการใช้ชีวิต
#รวมint main () { ไฟล์ *fp = NULL ;หนังถ่าน [255];fp = fopen ("/tmp/test.txt ", "r ");fscanf (fp , "%s ", หนังสัตว์ );printf ("1: %s \n ", หนังสัตว์ );fgets (หนัง , 255, (FILE *)fp );printf ("2: %s \n ", หนังสัตว์ );fgets (หนัง , 255, (FILE *)fp );printf ("3: %s \n ", หนังสัตว์ );fclose (fp );}
เมื่อโค้ดข้างต้นถูกคอมไพล์และดำเนินการ มันจะอ่านไฟล์ที่สร้างในส่วนก่อนหน้า ทำให้เกิดผลลัพธ์ต่อไปนี้:
1: This 2: กำลังทดสอบ fprintf...
3: นี่คือการทดสอบ fputs...
ขั้นแรก เมธอดของ fscanf() อ่านเฉพาะ This . เพราะมันพบช่องว่างด้านหลังประการที่สอง เรียกใช้ฟังก์ชันตัน 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 void *ptr , size_t size_of_elements , size_t number_of_elements , FILE *a_file );
ทั้งสองฟังก์ชันอ่านและเขียนสำหรับบล็อกหน่วยเก็บข้อมูล ซึ่งโดยปกติจะเป็นอาร์เรย์หรือโครงสร้าง
ด้านบนเกี่ยวกับการอ่านและเขียนไฟล์ C เป็นของ HDV Phoelectron Technology Ltd. ซึ่งเป็นการดำเนินการทางเทคนิคของซอฟต์แวร์และบริษัทด้านอุปกรณ์เกี่ยวกับเครือข่าย (เช่น ACสพป/ การสื่อสารสพป/ ฉลาดสพป/ไฟเบอร์สพปฯลฯ) ได้รวบรวมทีมซอฟต์แวร์ที่ทรงพลัง สำหรับลูกค้าทุกรายที่ปรับแต่งความต้องการเฉพาะที่ต้องการ และยังช่วยให้ผลิตภัณฑ์ของเราฉลาดและล้ำหน้ายิ่งขึ้น