C เอกสารความรู้
บทก่อนหน้านี้เราอธิบายเข้าและส่งออกอุปกรณ์การประมวลผลภาษา C มาตรฐาน ในบทนี้เราจะมาแนะนำโปรแกรมเมอร์ C วิธีการสร้างเปิดปิดข้อความหรือไฟล์ไบนารี
ไฟล์ไม่ว่าจะเป็นข้อความหรือข้อมูลไบนารีเป็นตัวแทนของชุดของไบต์ ฟังก์ชั่นภาษา C ไม่เพียง แต่ให้การเข้าถึงระดับสูงสุด แต่ยังให้พื้นฐาน (OS) ที่เรียกว่าการประมวลผลไฟล์ที่เก็บไว้ในอุปกรณ์ บทนี้จะอธิบายถึงความสำคัญของการเรียกร้องการจัดการไฟล์ที่
เปิดแฟ้ม
คุณสามารถใช้fopen () ฟังก์ชันในการสร้างเอกสารใหม่หรือเปิดไฟล์ที่มีอยู่สายจะเริ่มต้นวัตถุประเภทของไฟล์ที่ประเภทไฟล์ที่มีข้อมูลทั้งหมดที่จำเป็นในการควบคุมการไหลนี่คือต้นแบบของสายนี้:
FILE *fopen( const char * filename, const char * mode );
นี่ filename เป็นสตริงที่ใช้ในการตั้งชื่อไฟล์โหมดการเข้าถึงค่าโหมดสามารถเป็นหนึ่งในค่าต่อไปนี้:
模式 | 描述 |
---|---|
r | 打开一个已有的文本文件,允许读取文件。 |
w | 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。 |
a | 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
r+ | 打开一个文本文件,允许读写文件。 |
w+ | 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
a+ | 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 |
หากกระบวนการเป็นไฟล์ไบนารีที่คุณจำเป็นต้องใช้โหมดการเข้าถึงโหมดการเข้าถึงต่อไปนี้เพื่อแทนที่ด้านบน:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
ปิดแฟ้ม
;ปิดแฟ้มให้ใช้ fclose () ฟังก์ชัน ต้นแบบฟังก์ชั่นดังต่อไปนี้:
int fclose( FILE *fp );
หากประสบความสำเร็จปิดแฟ้ม fclose () ฟังก์ชันส่งกลับศูนย์ข้อผิดพลาดที่เกิดขึ้นเมื่อปิดแฟ้มฟังก์ชันจะส่งกลับ EOFฟังก์ชั่นนี้อยู่ในความเป็นจริงจะล้างข้อมูลในบัฟเฟอร์ปิดแฟ้มและรุ่นหน่วยความจำสำหรับแฟ้ม EOF เป็นค่าคงที่ที่กำหนดไว้ในstdio.h ไฟล์ส่วนหัวใน
C ห้องสมุดมาตรฐานมีความหลากหลายของฟังก์ชั่นที่จะกดตัวอักษรหรือในรูปแบบของสตริงความยาวคงที่ในการอ่านและเขียนไฟล์
เขียนไปยังแฟ้ม
นี่คือตัวละครที่เขียนในสตรีมของฟังก์ชั่นที่เรียบง่ายที่สุด:
int fputc( int c, FILE *fp );
fputc ฟังก์ชั่น ()เขียนตัวอักษร C ถึงค่าของพารามิเตอร์จุด FP เพื่อกระแสเอาท์พุท ถ้าเขียนจะประสบความสำเร็จก็จะส่งกลับตัวอักษรที่เขียนถ้ามีข้อผิดพลาดเกิดขึ้นก็จะส่งกลับEOFคุณสามารถใช้ฟังก์ชั่นต่อไปนี้เพื่อสตริงสิ้นสุดที่จะเขียนในสตรีม:
int fputs( const char *s, FILE *fp );
fputs () ฟังก์ชันเขียน sสตริง FP จุดกระแสข้อมูลขาออก ถ้าเขียนจะประสบความสำเร็จก็จะกลับค่าที่ไม่ใช่เชิงลบหากมีข้อผิดพลาดเกิดขึ้นก็จะส่งกลับEOFนอกจากนี้คุณยังสามารถใช้int fprintf (File * FP, const char * รูปแบบ, ... ) ฟังก์ชั่นการเขียนสตริงจะถูกเขียนไปยังแฟ้มลองตัวอย่างต่อไปนี้:
หมายเหตุ: ให้แน่ใจว่าคุณได้มีไดเรกทอรี / tmpถ้าไดเรกทอรีนี้ไม่ได้อยู่ที่คุณจะต้องสร้างไดเรกทอรีบนคอมพิวเตอร์ของคุณ
#include <stdio.h> main() { FILE *fp; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "This is testing for fprintf...\n"); fputs("This is testing for fputs...\n", fp); fclose(fp); }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะถูกสร้างขึ้นในไดเรกทอรี / tmp ไฟล์test.txt ใหม่และใช้สองฟังก์ชั่นที่แตกต่างกันเขียนสองบรรทัดขอให้เราอ่านไฟล์
อ่านไฟล์
นี่คือฟังก์ชั่นที่ง่ายต่อการอ่านตัวอักษรตัวเดียวจากไฟล์:
int fgetc( FILE * fp );
fgetc () ฟังก์ชันอ่านอักขระจากแฟ้มใส่ที่ชี้ไปตาม FPค่าตอบแทนเป็นตัวอักษรอ่านถ้ามีข้อผิดพลาดเกิดขึ้นผลตอบแทนEOFฟังก์ชั่นดังต่อไปนี้ช่วยให้คุณอ่านสตริงจากกระแสนี้:
char *fgets( char *buf, int n, FILE *fp );
fgets () ฟังก์ชันอ่าน N จากกระแสอินพุทที่ชี้ไปตาม FP - ตัวละครหนึ่งมันจะอ่านสตริงคัดลอกลงในbuf บัฟเฟอร์และในที่สุดก็ผนวกอักขระ nullจะยุติสตริง
หากฟังก์ชั่นก่อนที่จะอ่านอักขระตัวสุดท้ายที่พบอักขระ newline '\ n' ในตอนท้ายของไฟล์หรือ EOF เพียงเพื่อกลับไปอ่านตัวอักษรรวมทั้งการขึ้นบรรทัดใหม่ นอกจากนี้คุณยังสามารถใช้int fscanf (File * FP, const char * รูปแบบ, ... ) ฟังก์ชั่นในการอ่านสตริงจากแฟ้ม แต่ในใบหน้าของตัวอักษรช่องว่างแรกก็จะหยุดอ่าน
#include <stdio.h> main() { FILE *fp; char buff[255]; fp = fopen("/tmp/test.txt", "r"); fscanf(fp, "%s", buff); printf("1 : %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff ); fclose(fp); }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะอ่านไฟล์ที่สร้างขึ้นในส่วนที่ก่อให้เกิดผลลัพธ์ต่อไปนี้:
1 : This 2: is testing for fprintf... 3: This is testing for fputs...
แรก fscanf () วิธีการอ่านนี้เพราะมันพบช่องว่างในด้านหลังถัดไปโทรfgets () เพื่ออ่านส่วนที่เหลือจนกว่าจะสิ้นสุดของบรรทัดสุดท้ายโทรfgets () อ่านในสิ่งทั้งปวงบรรทัดที่สอง
I / O ไบนารีฟังก์ชั่น
ต่อไปนี้สองฟังก์ชั่นสำหรับปัจจัยการผลิตไบนารีและเอาท์พุท:
size_t fread(void *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);
ทั้งสองฟังก์ชั่นที่ใช้ในการอ่านและเขียนบล็อกหน่วยความจำ - ปกติอาร์เรย์หรือโครงสร้าง