【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.加锁 //使用资源之前 …...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
