C语言文件操作:读写与二进制文件

需积分: 9 1 下载量 195 浏览量 更新于2024-07-30 收藏 27KB DOCX 举报
"C语言文件操作教程,涵盖了ASCII和二进制文件的区别,以及如何使用fread和fwrite函数进行文件读写操作。" 在C语言中,文件操作是编程的重要部分,它允许程序与外部存储设备如硬盘进行交互,保存和读取数据。文件主要分为ASCII码文件和二进制文件两种类型。ASCII文件是以字符形式存储数据,每个字符对应一个字节的ASCII码,易于阅读和理解。而二进制文件则按照二进制编码存储,包含原始字节流,可能包含任何类型的数据,虽然也能显示,但内容不易直接解读。 C语言并不直接区分文件类型,而是将所有文件视为字符流,通过字节进行读写操作。这种处理方式称为“流式文件”。在C语言中,`fread` 和 `fwrite` 函数是进行文件读写的核心函数。 `fread` 函数用于从文件中读取数据,其基本语法为: ```c size_t fread(void *buffer, size_t size, size_t count, FILE *fp); ``` 参数含义如下: - `buffer`:指向内存位置的指针,用于接收读取的数据。 - `size`:单个数据项的字节数。 - `count`:要读取的数据项数。 - `fp`:文件指针,指向要读取的文件。 例如,若要读取40个结构体学生数据,可以使用 `fread` 进行如下操作: ```c struct student_type { char name[10]; int num; int age; char addr[30]; }; for (i = 0; i < 40; i++) fread(&stud[i], sizeof(struct student_type), 1, fp); ``` `fwrite` 函数与此类似,用于向文件写入数据: ```c size_t fwrite(const void *buffer, size_t size, size_t count, FILE *fp); ``` 如需将内存中的学生数据写入文件,同样可以使用 `fwrite`: ```c for (i = 0; i < 40; i++) fwrite(&stud[i], sizeof(struct student_type), 1, fp); ``` 这两个函数的返回值表示实际完成的数据项数,如果等于预期的 `count` 值,说明操作成功。 以下是一个简单的示例,演示如何向文件写入两条记录: ```c #include<stdio.h> #include<stdlib.h> struct record { char name[10]; int age; }; int main(void) { struct record array[2] = {{"Ken", 24}, {"Knuth", 28}}; FILE *fp = fopen("recfile", "w"); if (fp == NULL) { printf("Failed to open the file.\n"); exit(EXIT_FAILURE); } for (int i = 0; i < 2; i++) { fwrite(array + i, sizeof(struct record), 1, fp); } fclose(fp); return 0; } ``` 在这个示例中,我们创建了一个 `record` 结构体数组,然后使用 `fwrite` 将两条记录写入名为 "recfile" 的文件。注意,确保在文件操作完成后使用 `fclose` 函数关闭文件,以释放系统资源并确保数据正确保存。 通过理解和掌握这些基础知识,你就能在C语言中实现对文件的有效管理和数据的持久化存储。无论是读取配置文件、保存用户数据还是记录日志,文件操作都是必不可少的技能。