【C语言】文件操作函数详解

目录
- C语言文件操作函数详解
- 表格汇总
- 1. `fopen`
- 2. `fclose`
- 3. `fread`
- 4. `fwrite`
- 5. `fseek`
- 6. `ftell`
- 7. `rewind`
- 8. `fprintf`
- 9. `fscanf`
- 10. `feof`
- 11. `ferror`
- 12. `clearerr`
- 13. 总结
- 14. 附录:函数参考表
- 15. 结束语
- 相关文章:
C语言文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 <stdio.h> 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
表格汇总
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
fopen | 打开文件 | fopen("file.txt", "r") | 文件指针 |
fclose | 关闭文件 | fclose(file) | 返回 0 或 EOF |
fread | 从文件中读取数据 | fread(buffer, size, count, file) | 读取的数据 |
fwrite | 将数据写入文件 | fwrite(buffer, size, count, file) | 写入的数据 |
fseek | 设置文件位置指针 | fseek(file, offset, origin) | 返回 0 或 EOF |
ftell | 获取文件位置指针 | ftell(file) | 文件位置 |
rewind | 重置文件位置指针到文件开头 | rewind(file) | 无返回值 |
fprintf | 格式化输出到文件 | fprintf(file, "data: %d", value) | 格式化的字符串 |
fscanf | 从文件中格式化输入 | fscanf(file, "%d", &value) | 读取的值 |
feof | 检查文件是否到达文件末尾 | feof(file) | 返回非零值或 0 |
ferror | 检查文件操作是否发生错误 | ferror(file) | 错误代码 |
clearerr | 清除文件流的错误和EOF标志 | clearerr(file) | 无返回值 |
1. fopen
函数原型:
FILE *fopen(const char *filename, const char *mode);
参数说明:
filename: 要打开的文件的路径。mode: 文件打开模式,如"r"(只读)、"w"(只写)、"a"(追加)等。
返回值说明:
- 成功时,返回指向
FILE类型的文件指针;失败时,返回NULL。
示例代码:
#include <stdio.h>int main() {FILE *file;file = fopen("example.txt", "w");if (file == NULL) {perror("无法打开文件");return 1;}fprintf(file, "Hello, World!\n");fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
fopen | 打开文件 | fopen("example.txt", "w") | 文件指针或 NULL |
2. fclose
函数原型:
int fclose(FILE *stream);
参数说明:
stream: 要关闭的文件指针。
返回值说明:
- 成功时,返回
0;失败时,返回EOF。
示例代码:
#include <stdio.h>int main() {FILE *file;file = fopen("example.txt", "w");if (file == NULL) {perror("无法打开文件");return 1;}fprintf(file, "Hello, World!\n");if (fclose(file) != 0) {perror("无法关闭文件");return 1;}return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
fclose | 关闭文件 | fclose(file) | 0 或 EOF |
3. fread
函数原型:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
参数说明:
ptr: 指向存储读取数据的内存块的指针。size: 每个元素的字节数。count: 要读取的元素数量。stream: 文件指针。
返回值说明:
- 返回成功读取的元素数量。如果返回值小于
count,可能发生了文件结束或读取错误。
示例代码:
#include <stdio.h>int main() {FILE *file;char buffer[20];size_t bytesRead;file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}bytesRead = fread(buffer, sizeof(char), sizeof(buffer) - 1, file);buffer[bytesRead] = '\0'; // 确保字符串结束符printf("读取数据: %s\n", buffer);fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
fread | 从文件中读取数据 | fread(buffer, size, count, file) | 读取的数据 |
4. fwrite
函数原型:
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
参数说明:
ptr: 指向要写入文件的内存块的指针。size: 每个元素的字节数。count: 要写入的元素数量。stream: 文件指针。
返回值说明:
- 返回成功写入的元素数量。如果返回值小于
count,可能发生了写入错误。
示例代码:
#include <stdio.h>int main() {FILE *file;const char *text = "Hello, File Writing!";file = fopen("example.txt", "w");if (file == NULL) {perror("无法打开文件");return 1;}if (fwrite(text, sizeof(char), strlen(text), file) < strlen(text)) {perror("写入文件失败");fclose(file);return 1;}fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
fwrite | 将数据写入文件 | fwrite(buffer, size, count, file) | 写入的数据 |
5. fseek
函数原型:
int fseek(FILE *stream, long offset, int whence);
参数说明:
stream: 文件指针。offset: 从whence指定的位置偏移的字节数。whence: 指定偏移的起始位置,可以是SEEK_SET(文件开头)、SEEK_CUR(当前位置)、SEEK_END(文件末尾)。
返回值说明:
- 成功时返回
0;失败时返回-1。
示例代码:
#include <stdio.h>int main() {FILE *file;long position;file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}fseek(file, 5, SEEK_SET); // 从文件开头偏移5个字节position = ftell(file); // 获取当前文件位置printf("文件位置: %ld\n", position); // 输出: 文件位置: 5fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
fseek | 设置文件位置指针 | fseek(file, offset, whence) | 成功时 0 或 -1 |
6. ftell
函数原型:
long ftell(FILE *stream);
参数说明:
stream: 文件指针,指向一个已打开的文件。
返回值说明:
- 返回从文件开头到当前位置的字节数。成功时返回当前文件位置的偏移量,失败时返回
-1L。
示例代码:
#include <stdio.h>int main() {FILE *file;long position;file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}fseek(file, 10, SEEK_SET); // 从文件开头偏移10个字节position = ftell(file); // 获取当前文件位置printf("文件当前位置: %ld\n", position); // 输出: 文件当前位置: 10fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
ftell | 获取文件当前位置 | ftell(file) | 文件当前位置: 10 |
7. rewind
函数原型:
void rewind(FILE *stream);
参数说明:
stream: 文件指针,指向一个已打开的文件。
返回值说明:
- 无返回值。此函数将文件位置指针重置到文件的开头。
示例代码:
#include <stdio.h>int main() {FILE *file;char buffer[50];file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}fread(buffer, sizeof(char), sizeof(buffer) - 1, file); // 读取文件数据buffer[sizeof(buffer) - 1] = '\0'; // 确保字符串结束符rewind(file); // 重置文件指针到开头fread(buffer, sizeof(char), sizeof(buffer) - 1, file); // 重新读取文件数据buffer[sizeof(buffer) - 1] = '\0'; // 确保字符串结束符printf("重新读取的数据: %s\n", buffer); // 输出重新读取的数据fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
rewind | 重置文件指针到文件开头 | rewind(file) | 无输出(重置指针) |
8. fprintf
函数原型:
int fprintf(FILE *stream, const char *format, ...);
参数说明:
stream: 文件指针,指向一个已打开的文件。format: 格式字符串,用于指定输出格式。...: 其他格式化数据,根据format中的占位符提供。
返回值说明:
- 成功时,返回输出的字符总数;失败时返回
EOF。
示例代码:
#include <stdio.h>int main() {FILE *file;int number = 42;file = fopen("example.txt", "w");if (file == NULL) {perror("无法打开文件");return 1;}if (fprintf(file, "The answer is %d\n", number) < 0) {perror("写入文件失败");fclose(file);return 1;}fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
fprintf | 格式化输出到文件 | fprintf(file, "data: %d", value) | 格式化的字符串 |
9. fscanf
函数原型:
int fscanf(FILE *stream, const char *format, ...);
参数说明:
stream: 文件指针,指向一个已打开的文件。format: 格式字符串,用于指定输入格式。...: 其他格式化输入,根据format中的占位符提供。
返回值说明:
- 成功时,返回成功匹配和赋值的项目数;失败时返回
EOF。
示例代码:
#include <stdio.h>int main() {FILE *file;int number;file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}if (fscanf(file, "The answer is %d", &number) != 1) {perror("读取文件失败");fclose(file);return 1;}printf("读取的数字: %d\n", number);fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
fscanf | 从文件中格式化输入 | fscanf(file, "%d", &value) | 读取的值 |
10. feof
函数原型:
int feof(FILE *stream);
参数说明:
stream: 文件指针,指向一个已打开的文件。
返回值说明:
- 如果到达文件末尾,返回非零值;否则返回
0。
示例代码:
#include <stdio.h>int main() {FILE *file;char buffer[20];file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}while (fread(buffer, sizeof(char), sizeof(buffer) - 1, file) > 0) {buffer[sizeof(buffer) - 1] = '\0';printf("读取的数据: %s\n", buffer);}if (feof(file)) {printf("到达文件末尾\n");} else {printf("文件读取错误\n");}fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
feof | 检查文件是否到达文件末尾 | feof(file) | 到达文件末尾 |
11. ferror
函数原型:
int ferror(FILE *stream);
参数说明:
stream: 文件指针,指向一个已打开的文件。
返回值说明:
- 返回非零值表示发生了错误;返回
0表示没有错误。
示例代码:
#include <stdio.h>int main() {FILE *file;char buffer[20];file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}if (fread(buffer, sizeof(char), sizeof(buffer) - 1, file) < 0) {if (ferror(file)) {perror("读取文件错误");}fclose(file);return 1;}fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
ferror | 检查文件操作是否发生错误 | ferror(file) | 错误代码 |
12. clearerr
函数原型:
void clearerr(FILE *stream);
参数说明:
stream: 文件指针,指向一个已打开的文件。
返回值说明:
- 无返回值。此函数清除流的错误标志和EOF标志。
示例代码:
#include <stdio.h>int main() {FILE *file;char buffer[10];file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}fread(buffer, sizeof(char), sizeof(buffer) - 1, file); // 模拟读取if (ferror(file)) {printf("读取文件时发生错误\n");clearerr(file); // 清除错误标志}// 继续操作文件fclose(file);return 0;
}
表格说明:
| 函数 | 作用 | 示例 | 输出 |
|---|---|---|---|
clearerr | 清除文件流的错误和EOF标志 | clearerr(file) | 无输出(清除标志) |
13. 总结
C语言的文件操作函数提供了一系列用于处理文件的工具,包括打开、关闭、读写、定位文件指针以及检查文件状态等。这些函数为程序员提供了灵活的文件管理能力,从简单的文件读写到复杂的文件处理任务,都可以通过这些标准库函数来实现。掌握这些函数的使用对于编写健壮且可靠的C程序至关重要。
14. 附录:函数参考表
| 函数 | 作用 | 示例 | 返回值 |
|---|---|---|---|
fopen | 打开文件 | fopen("file.txt", "r") | 文件指针或 NULL |
fclose | 关闭文件 | fclose(file) | 0 或 EOF |
fread | 从文件中读取数据 | fread(buffer, size, count, file) | 读取的数据 |
fwrite | 将数据写入文件 | fwrite(buffer, size, count, file) | 写入的数据 |
fseek | 设置文件位置指针 | fseek(file, offset, SEEK_SET) | 0 或 EOF |
ftell | 获取文件当前位置 | ftell(file) | 文件位置 |
rewind | 重置文件位置指针到文件开头 | rewind(file) | 无返回值 |
fprintf | 格式化输出到文件 | fprintf(file, "data: %d", value) | 格式化的字符串 |
fscanf | 从文件中格式化输入 | fscanf(file, "%d", &value) | 读取的值 |
feof | 检查文件是否到达文件末尾 | feof(file) | 非零值或 0 |
ferror | 检查文件操作是否发生错误 | ferror(file) | 错误代码 |
clearerr | 清除文件流的错误和EOF标志 | clearerr(file) | 无返回值 |
通过理解和运用这些文件操作函数,可以有效地进行文件读写操作,并处理各种文件相关的错误和状态检查。这对于实现文件管理功能以及确保程序的健壮性具有重要意义。
15. 结束语
- 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言文件操作函数有了更深入的理解和认识。
- 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!点我关注❤️
相关文章:
- 指针的神秘探险:从入门到精通的奇幻之旅 !
相关文章:
【C语言】文件操作函数详解
目录 C语言文件操作函数详解表格汇总1. fopen2. fclose3. fread4. fwrite5. fseek6. ftell7. rewind8. fprintf9. fscanf10. feof11. ferror12. clearerr13. 总结14. 附录:函数参考表15. 结束语相关文章: C语言文件操作函数详解 C语言提供了一组标准库函…...
Java 垃圾回收,看一遍就懂
了解 Java 垃圾收集的工作原理并优化应用程序中的内存使用情况。详细了解 Java 中内存管理的复杂性。 垃圾收集是一个关键过程,可以帮助任何Java 开发公司。编程语言中的这一强大功能可以巧妙地管理内存分配和释放,防止内存泄漏并优化资源利用率。它就像…...
手把手教你CNVD漏洞挖掘 + 资产收集
0x1 前言 挖掘CNVD漏洞有时候其实比一般的edusrc还好挖,但是一般要挖证书的话,还是需要花时间的,其中信息收集,公司资产确定等操作需要花费一定时间的。下面就记录下我之前跟一个师傅学习的一个垂直越权成功的CNVD漏洞通杀&#…...
华为云低代码AstroZero技巧教学1:表格的超链接赋能
在低代码AstroZero的标准页面设计和构建上,我们总是在思考如何让用户体验能够更加流畅。 为此,我们特推出低代码AstroZero技巧教学系列合集,让各位开发者能够更加方便快捷地掌握低代码AstroZero的操作技巧。 本次技巧内容: 在As…...
https握手过程详解
https握手过程详解 上一篇《HTTPS通讯全过程》中https握手过程实际上还有更多的细节,为什么会这样设计呢?是因为一开始将握手过程时,吧步骤说的太详细会导致更难理解惹。所以我就先在上一篇把部分细节忽略,把原来几步的过程先简化…...
Lesson 63 Thank you, doctor
Lesson 63 Thank you, doctor 词汇 better a. 更好的 搭配:feel better get better 感觉好些了 成语:Better late than never. 晚做总比不做好。 Half a loaf is better than no bread. 有比没有好。…...
使用python和matlab实现BP神经网络算法的分析比较
分析和比较使用Python和MATLAB实现BP神经网络算法实现的复杂度、代码可读性、库支持、性能以及应用的灵活性等。 1. BP神经网络的基本原理 BP神经网络(Back Propagation Neural Network)是一种多层前馈神经网络,通过反向传播算法来训练网络。其基本思想是利用梯度下降法,…...
智慧卫生间环境传感器有哪些?智慧卫生间的特点@卓振思众
随着科技的进步和人们对生活品质的要求不断提高,智慧卫生间作为现代化设施的代表,越来越受到关注。智慧卫生间不仅仅是在外观设计上做文章,更在于其背后强大的智能系统,特别是环境传感器的应用,让厕所的管理和使用变得…...
智能分班结果自动发布系统
新学期,校园里又将迎来一批充满活力的新生。对于老师们来说,除了准备教学计划和课程内容,还有一项看似简单却颇为繁琐的任务——发布分班。传统的分班信息发布方式,通常是老师们一个个私信给学生家长,家长们收到信息后…...
vue 后台管理 指定项目别名
越多越好 文章目录 一、指定项目路径别名二、全局loading进度条实现三、动态页面标题的实现四、全局刷新 和 全屏 一、指定项目路径别名 在 vite.config.js 里配置 import path from "path"export default defineConfig({resolve:{alias:{"~":path.resol…...
【Python机器学习】FP-growth算法——构建FP树
在第二次扫描数据集时会构建一棵FP树。为构建一棵树,需要一个容器来保存树。 创建FP树的数据结构 FP树要比书中其他树更加复杂,因此需要创建一个类来保存树的每一个节点: class treeNode:def __init__(self,nameValue,numOccur,parentNode…...
JAVA itextpdf 段落自动分页指定固定行距打印
JAVA itextpdf 段落自动分页指定固定行距打印 前言:公司有个需求,打印的合同模板左上角要加上logo的图标。但是itext pdf 自动分页会按照默认的顶部高分页打印内容的,导致从第二页开始logo图标就会把合同的内容给覆盖掉了。然后尝试了挺多方法…...
基于SpringBoot+Vue的周边游平台个人管理模块的设计与实现
TOC springboot220基于SpringBootVue的周边游平台个人管理模块的设计与实现 第一章 绪论 1.1 选题背景 目前整个社会发展的速度,严重依赖于互联网,如果没有了互联网的存在,市场可能会一蹶不振,严重影响经济的发展水平…...
开源数据库同步工具monstache
Monstache是一个用Go语言编写的同步工具,主要用于将MongoDB中的数据同步到Elasticsearch中。它支持全量同步和增量同步,并提供了丰富的配置参数以及使用Go、JavaScript编写插件来自定义处理数据的逻辑的能力。Monstache 工作流程如下图: 以下…...
Ubuntu连接GitHub
报错:Please make sure you have the correct access rights and the repository exists.原因:本地没有SSH Key存在解决: 首先为系统设置github的用户名和自己的邮箱 git config --global user.name "****" git config --global us…...
微信支付流程
1. 创建订单 请求创建订单的 API 接口:把 订单金额、收货地址、订单中包含的商品信息 发送到服务器服务器响应的结果:订单编号 2.订单预支付 请求订单预支付的 API 接口:把步骤1得到的 订单编号 发送到服务器服务器响应的结果:…...
LVS理论知识
目录 1.描述以及工作原理 1.什么是LVS 2.LVS调度算法 1.静态调度算法 1.轮询RR 2.加权轮询WRR 3.目标地址hash---DH 4.源地址hash---SH 2.动态调度算法 1.LC最少连接 2.wlc加权最少连接 3.sed最少期望延迟 4.nq不排队调度算法 5.lblc基于本地最少连接 6.lnlcr带…...
uniapp接口请求this.$request
代码示例: createPhoto(url) {this.$request({url: /emp/gallery-photo/create,//后端接口method: post,//请求方法header: {//请求头tenant-id: 1,},data: {//请求参数galleryId: this.albumId,empUserId: this.empUserId,"url": url,}}).then((res) &…...
vulnhub靶机 W34KN3SS(渗透测试详解)
一、靶机信息收集 1、靶机下载地址 https://download.vulnhub.com/w34kn3ss/W34KN3SS.ova 2、扫描靶机IP 3、探测靶机端口、主机、服务版本信息 nmap -sS -sV -A -p- 192.168.31.160 4、进行目录扫描 二、web渗透测试 1、访问靶机IP 没什么发现 2、进行目录拼接访问 拼接…...
2024年8月16日嵌入式学习
今日复习信号量的知识点和学习了进程间通信和管道 总结信息量: 共享进程资源 方便 线程 抢占公共资源 带来的问题 1. 互斥访问 需要互斥锁 来保障 原子性操作 使 操作过程 完整 互斥锁: a.初始化 锁 b.加锁 //使用资源之前 …...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
