当前位置: 首页 > ops >正文

C语言文件操作

1.文件的概念

磁盘上的文件是文件。
但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)
程序文件:
包括源程序文件(后缀为 .c , 目标文件( windows 环境后缀为 .obj , 可执行程序( windows 环境
后缀为 .exe )。
数据文件:
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,
或者输出内容的文件。
文件名:
一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件名包含 3 部分:文件路径 +文件名主干+文件后缀
例如: c:\code\test.txt
为了方便起见,文件标识常被称为 文件名

2.文件的打开与关闭

2.1.文件指针

定义:

缓冲文件系统中,关键的概念是 文件类型指针 ,简称 文件指针
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名文件字状态及文件当前的位置等)。
这些信息是保存在一个结构体变量中的。该结构体类型是由系统 声明的,取名FILE .

工作原理

1.文件指针是文件操作的核心,所有文件读写函数都通过它定位文件位置并执行操作。

2.文件指针在文件打开时由 fopen() 函数返回,在文件关闭时失效。

2.2.文件的打开与关闭

1.打开文件(fopen)
参数

filename:文件路径(相对或绝对)。

mode:打开模式(详见下表)。

返回值:
成功:返回文件指针
失败:返回 NULL,需处理错误。

文件打开模式:
主要的还是下面三个
文件打开的一般示例:
2.关闭文件(fclose)
参数
文件指针
返回值:
成功:返回 0
失败:返回 EOF
文件关闭一般示例:

完整示例:

3.文件的写入和读取

3.1.字符的输入输出函数

1.fgetc(字符输入)

1.函数原型int fgetc(FILE *stream);

功能:从输入流中读取单个字符。

参数stream 为文件指针(如 stdin 或已打开的文件)。

返回值:

成功:返回读取的字符,转换成对应的ascll

失败或读到文件末尾:返回 EOF

示例

2. fputc(字符输出)

函数原型int fputc(int char, FILE *stream);

功能:向输出流写入单个字符。

参数:

char:写入的字符

stream:文件指针

返回值:

成功:返回写入的字符

失败:返回EOF

示例

3.2.文本行的输入输出函数

1.fgets(文本行输入)

函数原型char *fgets(char *str, int n, FILE *stream);

功能:从输入流读取一行文本(包括换行符 \n),最多读取 n-1 个字符(其中要剩下一个位置,储存\0)

参数:

str:接受读取的文本行指针

n:一次性读取的个数

stream:读取的文件指针

返回值:

成功:返回 str

失败或读取的文件末尾:返回NULL

注意:

1.自动会再字符串末尾加上\0

2.行长度超过 n-1,剩余字符会留在流中下次读取

示例:

2. fputs(文本行输出)

函数原型int fputs(const char *str, FILE *stream);

功能:向输出流写入字符串(不自动添加换行符)。

参数:

str:字符串指针

stream:文件指针

返回值:

成功:返回非负数

失败:返回EOF

示例

3.3.格式化输入输出函数

1.fscanf(格式化输入)

函数原型int fscanf(FILE *stream, const char *format, ...);

功能:从输入流按格式读取数据。

参数:

format:格式字符串(如 "%d %s")。

可变参数:存储读取结果的变量地址。

返回值:

成功:返回成功匹配的参数数量。

失败或文件末尾:返回 EOF

示例

2. fprintf(格式化输出)

函数原型int fprintf(FILE *stream, const char *format, ...);

功能:向输出流按格式写入数据。

参数:

format:格式字符串(如 "Value: %d\n")。

可变参数:要写入的数据。

返回值:

成功:返回写入的字符数。

失败:返回负数

示例:

3.4.二进制输入输出

 1.fread(二进制输入)

函数原型size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:从文件流读取二进制数据块。

参数:

ptr:存储数据的缓冲区指针。

size:每个数据项的字节大小。

nmemb:要读取的数据项数量。

stream:文件指针(需以二进制模式打开,如 "rb")。

返回值:返回实际读取的数据项数量(可能小于 nmemb)。

示例

2.fwrite(二进制输出)

函数原型size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:向文件流写入二进制数据块。

参数:

ptr:要写入的数据指针。

size:每个数据项的字节大小。

nmemb:要写入的数据项数量。

返回值:返回实际写入的数据项数量。

示例

3.5.函数比较

1. 输入函数对比:scanf vs fscanf vs sscanf

共同点

1.均使用格式字符串指定输入类型(如 %d%s%f 等)。

2.返回值均为成功匹配的参数数量,失败或文件末尾返回 EOF

核心区别

1.输入源不同scanf 从键盘读取,fscanf 从文件读取,sscanf 从字符串读取。

场景:

scanf:交互式输入(如用户输入)

fscanf:文件数据解析(如配置文件)

sscanf:字符串解析(如解析网络协议或文本数据)

代码示例:

2. 输出函数对比:printf vs fprintf vs sprintf

共同点

1.均使用格式字符串指定输出格式。

2.返回值均为写入的字符数(不包括结尾的 \0),错误时返回负数。

核心区别

2.输出目标不同printf 输出到屏幕,fprintf 输出到文件,sprintf 输出到字符串。

场景:

scanf:交互式输入(如用户输入)

fscanf:文件数据解析(如配置文件)

sscanf:字符串解析(如解析网络协议或文本数据

代码示例:

4.文件的随机读写

1.fseek
功能:移动文件位置指针到指定位置,支持从文件头、当前位置或文件尾开始偏移。
函数:
参数:
示例:
2.ftell
功能:返回文件位置指针相对于文件开头的偏移量(字节数)。
函数:
返回值:
成功:返回偏移量
失败:-1
示例:
3.rewind
功能:将文件位置指针移动到文件开头,清除错误标志
函数:
示例:
等价于:

5.frof的使用

功能:feof(FILE *stream) 用于检测文件指针是否已到达文件末尾

返回值:

到达文件末尾返回非0值(true)

未到达文件末尾返回0(false)

错误的使用场景:

此时可能会导致多执行一次循环

正确的方式:
feof和ferror的使用时机都是当文件的读取完成后使用的,判断是否是正常的结束

6.文件缓冲区

ANSIC 标准采用 缓冲文件系统 处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序
中每一个正在使用的文件开辟一块 文件缓冲区 。从内存向磁盘输出数据会先送到内存中的缓冲区,装
满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓
冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根
C 编译系统决定的。
主要功能就是:提高效率
http://www.xdnf.cn/news/6723.html

相关文章:

  • 第八章 模板项目生成
  • Nextjs首屏加载速度性能从80分优化到98分
  • Qt控件:交互控件
  • PT2020 20触控I2C输出IC
  • 时频分析的应用—外部信号的显影和定点清除
  • 第三部分:内容安全(第十六章:网络型攻击防范技术、第十七章:反病毒、第十八章:入侵检测/防御系统(IDS/IPS))
  • 第J1周:ResNet-50算法实战与解析
  • C语言图案代码大全:从基础到高级
  • 院校机试刷题第四天:1911反转公约数、1702十六进制不进位加法
  • PR-2021
  • ADC深入——SNR、SFDR、ENOB等概念
  • 深入浅出拆分学习,图神经网络拆分学习,混合联邦学习
  • 网络攻防模拟:城市安全 “数字预演”
  • 14 C 语言浮点类型详解:类型精度、表示形式、字面量后缀、格式化输出、容差判断、存储机制
  • AlphaEvolve:基于Gemini的算法发现与优化综合报告
  • AI在线写作平台:AnKo引领未来创作新潮流!
  • 分析主流编程语言中哪些为支持面向对象的语言
  • 什么是实景VR?实景VR应用场景
  • 如何早期识别帕金森病?
  • 《图解 TCP/IP》笔记
  • 安科瑞DJSF1352-D直流电能表:破解充电桩计量难题
  • linux安装宝塔面板到数据盘
  • python Excel操作,将一个工作表中的sheet页复制到另一个工作表中(包括单元格的内容、样式、格式等)
  • 电动汽车直流快充充电桩AEV200-DC240M4的详细介绍
  • 防篡改小工具监测被该文件
  • 【GAN网络入门系列】一,手写字MINST图片生成
  • 实战解析MCP-使用本地的Qwen-2.5模型-AI协议的未来?
  • 录音证据想得到法院的采纳,应注意哪几点?
  • 存储器上如何存储1和0
  • Python 实验 1