C语言文件操作深度解析:从基础到实践

张开发
2026/4/6 11:19:16 15 分钟阅读

分享文章

C语言文件操作深度解析:从基础到实践
在C语言的学习和应用中文件操作是一项极为重要的技能。它能够让程序与外部存储设备进行数据交互实现数据的持久化存储和读取。今天我们就围绕“C语言文件操作”展开深入探讨对应图片中的8个重点内容为大家带来全面且实用的讲解。目录一、为什么使用文件二、什么是文件三、文件的打开和关闭四、文件的顺序读写五、文件的随机读写六、文本文件和二进制文件七、文件读取结束的判定八、文件缓冲区一、为什么使用文件在程序运行过程中数据通常存储在内存里一旦程序结束这些数据就会丢失。而文件则可以将数据长期保存在外部存储介质如硬盘上方便下次程序运行时读取实现数据的持久化。比如学生成绩管理系统中学生的成绩信息需要长期保存就可以通过文件操作来实现。此外文件还能用于不同程序之间的数据共享以及记录程序的运行日志等。二、什么是文件从操作系统的角度来看文件是存储在外部存储设备上的一组相关数据的集合有自己的文件名和存储路径。在C语言中文件分为文本文件和二进制文件。文本文件以字符形式存储数据每个字符对应一个ASCII码值二进制文件则以二进制形式存储数据与内存中数据的存储形式一致。三、文件的打开和关闭在C语言中使用fopen 函数打开文件fclose 函数关闭文件。 fopen 函数的原型为FILE *fopen(const char *filename, const char *mode);filename 是要打开的文件名包含路径 mode 是文件的打开模式如 r 只读、 w 只写会清空原有内容、 a 追加等。 fclose 函数原型为int fclose(FILE *stream);stream 是 fopen 函数返回的文件指针。示例代码#include stdio.h int main() { FILE *fp; fp fopen(test.txt, w); if (fp NULL) { printf(文件打开失败\n); return 1; } // 文件操作代码 fclose(fp); return 0; }四、文件的顺序读写顺序读写是按照文件中数据的存储顺序依次进行读取或写入操作。常见的函数有 fputc 写入一个字符、 fgetc 读取一个字符、 fputs 写入一个字符串、 fgets 读取一个字符串等。示例代码写入字符串#include stdio.h int main() { FILE *fp; fp fopen(test.txt, w); if (fp NULL) { perror(文件打开失败); return 1; } fputs(Hello, C file operation!, fp); fclose(fp); return 0; }示例代码读取字符串#include stdio.h #define BUFFER_SIZE 100 int main() { FILE *fp; char buffer[BUFFER_SIZE]; fp fopen(test.txt, r); if (fp NULL) { perror(文件打开失败); return 1; } fgets(buffer, BUFFER_SIZE, fp); printf(%s, buffer); fclose(fp); return 0; }五、文件的随机读写随机读写允许我们在文件的任意位置进行读取或写入操作通过fseek 函数来定位文件指针ftell 函数获取文件指针当前位置rewind 函数将文件指针复位到文件开头。 fseek 函数原型为int fseek(FILE *stream, long int offset, int origin);stream 是文件指针 offset 是偏移量 origin 是起始位置SEEK_SET 文件开头、 SEEK_CUR 当前位置、 SEEK_END 文件末尾。示例代码定位到文件中间位置读取数据#include stdio.h int main() { FILE *fp; fp fopen(test.txt, r); if (fp NULL) { perror(文件打开失败); return 1; } fseek(fp, 5, SEEK_SET); // 定位到第6个字符位置 char ch; ch fgetc(fp); printf(%c\n, ch); fclose(fp); return 0; }六、文本文件和二进制文件如前文所述文本文件和二进制文件存储形式不同。文本文件便于人类阅读和编辑但在存储数值等数据时可能会有转换损耗二进制文件存储效率高能准确存储各种数据类型但不便于直接查看内容。以存储整数 100 为例#include stdio.h int main() { // 写入文本文件 FILE *text_fp fopen(text.txt, w); if (text_fp NULL) { perror(文本文件打开失败); return 1; } fprintf(text_fp, %d, 100); fclose(text_fp); // 写入二进制文件 FILE *bin_fp fopen(bin.bin, wb); if (bin_fp NULL) { perror(二进制文件打开失败); return 1; } int num 100; fwrite(num, sizeof(int), 1, bin_fp); fclose(bin_fp); return 0; }七、文件读取结束的判定常用的判定方法有对于文本文件使用 feof 函数判断是否到达文件末尾当 feof 函数返回非零值时表示到达文件末尾对于二进制文件通过 fread 等函数的返回值来判断读取是否结束若返回值小于要读取的元素个数则表示读取结束。示例代码文本文件#include stdio.h int main() { FILE *fp; fp fopen(test.txt, r); if (fp NULL) { perror(文件打开失败); return 1; } int ch; while ((ch fgetc(fp)) ! EOF) { putchar(ch); } fclose(fp); return 0; }八、文件缓冲区为了提高文件读写效率C语言为每个打开的文件都设置了一个缓冲区。在写入文件时数据先写入缓冲区当缓冲区满或文件关闭时数据才真正写入外部存储设备读取文件时数据先从外部存储设备读取到缓冲区然后再从缓冲区读取到程序变量中。可以使用 fflush 函数来强制刷新缓冲区将缓冲区中的数据立即写入文件。#include stdio.h int main() { FILE *fp; fp fopen(test.txt, w); if (fp NULL) { perror(文件打开失败); return 1; } fputs(立即写入数据, fp); fflush(fp); // 强制刷新缓冲区 fclose(fp); return 0; }通过对以上C语言文件操作重点内容的详细讲解和示例代码演示相信大家对C语言文件操作有了更深入的理解和掌握。在实际编程中合理运用这些知识能让我们的程序更加完善和强大。

更多文章