快速入门文件操作+5种例子演示
文件操作
- 基本操作
- 注意事项
- 例子1:读取文件内容
- 例子2:写入文件内容
- 例子3:追加文件内容
- 例子4:读取并写入文件内容(复制文件)
- 例子5:使用二进制模式读写文件
基本操作
在C语言中,使用文件操作功能通常涉及以下步骤:
-
包含头文件:
首先,你需要包含stdio.h
头文件,因为所有的标准I/O函数(包括文件操作函数)都定义在这个头文件中。#include <stdio.h>
-
打开文件:
使用fopen
函数打开文件。你需要指定文件名和打开模式(如 “r” 用于读取,“w” 用于写入,“a” 用于追加等)。FILE *file = fopen("filename.txt", "r"); // 打开文件用于读取 if (file == NULL) {perror("打开文件失败");return 1; // 返回非零值表示错误 }
如果文件不存在或无法打开,
fopen
将返回NULL
,并可以通过perror
函数打印出错误信息。
打开模式:
不同的文件打开模式决定了文件如何被访问。常用的模式有:"r"
:只读模式。"w"
:写入模式(如果文件不存在则创建它,如果文件已存在则删除它的内容)。"a"
:追加模式(如果文件不存在则创建它,如果文件已存在则追加到文件末尾)。"r+"
:读写模式(从文件开头开始)。"w+"
:读写模式(与 “w” 相同,但允许读取)。"a+"
:读写模式(与 “a” 相同,但允许读取)。"rb"
、"wb"
、"ab"
、"r+b"
、"w+b"
、"a+b"
:二进制模式(与上面的文本模式相同,但用于二进制文件)。
-
读取或写入文件:
根据打开模式,你可以使用不同的函数来读取或写入文件。- 读取文本文件:
fgets
,fscanf
- 写入文本文件:
fputs
,fprintf
- 读取二进制文件:
fread
- 写入二进制文件:
fwrite
例如,读取文本文件:
char buffer[1024]; while (fgets(buffer, sizeof(buffer), file)) {printf("%s", buffer); }
写入文本文件:
fprintf(file, "这是写入文件的内容\n");
- 读取文本文件:
-
文件位置控制(可选):
如果需要,可以使用fseek
、ftell
和rewind
等函数来控制文件位置。fseek
:用于设置文件位置指针。ftell
:返回当前文件位置指针的位置。rewind
:将文件位置指针重置到文件开头。
文件定位(如果需要):
如果你想在文件中移动位置(例如,从文件中间开始读取或写入),你可以使用 fseek
函数。
fseek(file, 10, SEEK_SET); // 从文件开头向后移动10个字节
获取文件状态信息:
使用 ftell
函数可以获取当前文件位置指示器的位置。
long position = ftell(file); // 获取当前位置
- 关闭文件:
使用fclose
函数关闭文件。这是一个重要的步骤,因为它会确保所有的数据都被正确地写入磁盘,并释放与文件关联的所有资源。
fclose(file); // 关闭文件
- 错误处理:
始终检查fopen
的返回值,以确保文件已成功打开。如果fopen
返回NULL
,则表示打开文件失败。
完整示例:
#include <stdio.h>int main() {FILE *file;char buffer[1024];// 打开文件用于读取file = fopen("example.txt", "r");if (file == NULL) {perror("打开文件失败");return 1;}// 读取并打印文件内容while (fgets(buffer, sizeof(buffer), file)) {printf("%s", buffer);}// 关闭文件fclose(file);file = NULL;return 0;
}
注意事项
- 确保你有足够的权限来读取或写入文件。
- 读取文件时,要注意缓冲区的大小,以防止缓冲区溢出。
- 写入文件时,要注意写入的数据类型和格式,以确保数据被正确地写入文件。
- 在使用完文件后,始终使用
fclose
关闭文件,以释放资源并避免潜在的问题。 - 如果文件操作可能失败(例如,文件不存在或磁盘空间不足),请确保你的代码能够妥善处理这些错误情况。
例子1:读取文件内容
#include <stdio.h>int main() {FILE *file;char line[1024];file = fopen("example.txt", "r"); // 以只读模式打开文件if (file == NULL) {perror("打开文件失败");return 1;}// 逐行读取文件并打印while (fgets(line, sizeof(line), file)) {printf("%s", line);}fclose(file); // 关闭文件file = NULL;return 0;
}
例子2:写入文件内容
#include <stdio.h>int main() {FILE *file;file = fopen("output.txt", "w"); // 以写入模式打开文件if (file == NULL) {perror("打开文件失败");return 1;}// 写入多行文本到文件fprintf(file, "这是第一行文本\n");fprintf(file, "这是第二行文本\n");fclose(file); // 关闭文件file = NULL;return 0;
}
例子3:追加文件内容
#include <stdio.h>int main() {FILE *file;file = fopen("example.txt", "a"); // 以追加模式打开文件if (file == NULL) {perror("打开文件失败");return 1;}// 追加文本到文件末尾fprintf(file, "这是追加到文件末尾的文本\n");fclose(file); // 关闭文件file = NULL;return 0;
}
例子4:读取并写入文件内容(复制文件)
#include <stdio.h>int main() {FILE *source, *dest;char ch;source = fopen("source.txt", "r"); // 打开源文件if (source == NULL) {perror("打开源文件失败");return 1;}dest = fopen("destination.txt", "w"); // 打开目标文件if (dest == NULL) {fclose(source); // 释放源文件句柄perror("打开目标文件失败");return 1;}// 从源文件读取内容并写入到目标文件while ((ch = fgetc(source)) != EOF) {fputc(ch, dest);}fclose(source); // 关闭源文件source = NULL;fclose(dest); // 关闭目标文件dest = NULL;return 0;
}
例子5:使用二进制模式读写文件
#include <stdio.h>int main() {FILE *file;unsigned char buffer[1024];size_t n;// 以二进制写入模式打开文件file = fopen("binary_file.bin", "wb");if (file == NULL) {perror("打开文件失败");return 1;}// 写入一些二进制数据到文件unsigned int data = 0x12345678;fwrite(&data, sizeof(data), 1, file);fclose(file); // 关闭文件// 以二进制读取模式重新打开文件file = fopen("binary_file.bin", "rb");if (file == NULL) {perror("打开文件失败");return 1;}// 从文件中读取二进制数据n = fread(buffer, sizeof(unsigned char), sizeof(buffer), file);if (n > 0) {// 假设我们读取了整个unsigned int的数据if (n >= sizeof(unsigned int)) {unsigned int *read_data = (unsigned int*)buffer;printf("读取到的数据是: 0x%X\n", *read_data);}}fclose(file); // 关闭文件file = NULL;return 0;
}
相关文章:
快速入门文件操作+5种例子演示
文件操作 基本操作注意事项例子1:读取文件内容例子2:写入文件内容例子3:追加文件内容例子4:读取并写入文件内容(复制文件)例子5:使用二进制模式读写文件 基本操作 在C语言中,使用文…...

基于Vue3的Uniapp实训项目|一家鲜花店
基于Vue的Uniapp实训指导项目 项目预览: 在这里插入图片描述 pages.json {"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages{"path": "pages/index/index",&…...
Python3 字典
前言 本文主要介绍Python中的字典(dict),主要内容包括:字典简介、字典特性、字典的基本操作。 文章目录 前言一、字典简介二、字典特性1、键值对2、无序性?3、可变性4、键的唯一性5、值的类型不限 三、字典的基本操作1、创建2、访问3、增加…...

JPA详解
文章目录 JPA概述JPA的优势JPA注解 JPA概述 Java Persistence API(JPA)是 Java EE 平台的一部分,它为开发者提供了一种用于对象关系映射(ORM)的标准化方法。JPA 提供了一组 API 和规范,用于在 Java 应用程…...

Linux线程:线程分离
目录 一、什么是线程分离 1.1pthread_detach 1.2pthread线程库存在的意义 1.3__thread线程的局部存储 1.4系统调用clone 一、什么是线程分离 1.1pthread_detach 默认情况下,新创建的线程是joinable的,线程退出后,需要对其进行pthread_joi…...

chatgpt之api的调用问题
1.调用api过程中,出现如下报错内容 先写一个测试样例 import openaiopenai.api_key "OPEN_AI_KEY" openai.api_base"OPEN_AI_BASE_URL" # 是否需要base根据自己所在地区和key情况进行completion openai.ChatCompletion.create(model"g…...
Java中lambda表达式是啥怎么使用
在Java中,Lambda表达式(也称为闭包)是一种简洁地表示匿名函数(即没有名称的函数)的方式。它们允许你将函数作为参数传递或赋值给变量,从而简化代码。Lambda表达式在Java 8及更高版本中引入。 Lambda表达式…...

selenium中, quit 和close的区别
close时 """ close和quit的区别 close关闭当前页 (只是关闭了当前) quit离开整个浏览器 (走远了) """ from selenium import webdriver import time# 创建浏览器驱动对象 from selenium.webdriver.co…...

管易云和金蝶云星空接口打通对接实战
管易云和金蝶云星空接口打通对接实战 源系统:管易云 金蝶管易云是金蝶集团旗下以电商和新零售为核心业务的子公司,公司于2008年成立,拥有从事电商及新零售业务相关专业知识工作者超过1000人。为伊利、网易有道、东阿阿胶、金龙鱼、海康、科大讯飞等超过1…...

DP-Kmaens密度峰值聚类算法
我有个问题 关于 [密度值>密度阈值] 的判定这里,新进来的新数据怎么确定他的密度值?密度阈值又是怎样确定的呢?...

STM32-14-FSMC_LCD
STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU 文章目录 1. 显示器分类2. LCD简…...

linux nohup命令详解:持久运行命令,无视终端退出
nohup (全称为 “no hang up”),用于运行一个命令,使其在你退出 shell 或终端会话后继续运行。 基本语法 nohup command [arg1 ...] [&> output_file] &command 是你想要运行的命令。[arg1 ...] 是该命令的参数。&am…...

PS系统教程09
修复照片 修饰工具 污点修复画笔工具(J) 主要作用:去除一些污点或者不需要的 【:缩小】:放大 目标:去掉这两个点 修复画笔工具 也就是说我们要有取样点 选择修复画笔工具按住Alt键吸取周边相近颜色松开单机…...

2024089期传足14场胜负前瞻
2024089期售止时间为6月3日(周一)22点00分,敬请留意: 本期1.5以下赔率5场,1.5-2.0赔率5场,其他场次是平半盘、平盘。本期14场难度偏低。以下为基础盘前瞻,大家可根据自身判断,复选增…...

备战十一届大唐杯国赛预选赛
这次省赛带了太多个省一了,具体可看下面的图片,只放了一部分。目前根据可靠消息,应该还有个预选赛和去年一样,就是还会考一次仿真。如果说通过了就是国二起步然后去北方工业争夺国一国二,没过的话就是国三。 每…...

安装 Android Studio 2024.1.1.6(Koala SDK35)和过程问题解决
记录更新Android Studio版本及适配Android V应用配置的一些过程问题。 安装包:android-studio-2024.1.1.6-windows.exe原版本:Android Studio23.2.1.23 Koala 安装过程 Uninstall old version 不会删除原本配置(左下角提示) Un…...

美团一面:什么是CAS?有什么优缺点?我说你说的是AtomicInteger吗?
引言 传统的并发控制手段,如使用synchronized关键字或者ReentrantLock等互斥锁机制,虽然能够有效防止资源的竞争冲突,但也可能带来额外的性能开销,如上下文切换、锁竞争导致的线程阻塞等。而此时就出现了一种乐观锁的策略&#x…...
【linux】(2)文件内容排序sort
sort 是一个用于排序文件内容的命令行工具,在 Linux 和 Unix 系统中非常常用。 基本用法 sort [OPTION]... [FILE]...常用选项 按数值排序 -n sort -n filename例子:对包含数值的文件进行排序。 按字典顺序排序 -d sort -d filename例子࿱…...

css 图片上添加模糊背景的文字内容
html部分 <div class"onlogo"> <img src"../assets/img/banner.png" /><div class"imgText"><div class"title">一体化电子印章应用服务</div><div class"content">为企业提供安全可靠…...
Python3 函数参数
前言 本文主要介绍python中的函数参数,主要内容包括形式参数与实际参数的概念、位置参数、关键字参数、默认参数、可变参数。 文章目录 前言一、形式参数与实际参数的概念二、位置参数(也叫必需参数)三、关键字参数四、默认参数五、可变参数…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...