快速入门文件操作+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中的函数参数,主要内容包括形式参数与实际参数的概念、位置参数、关键字参数、默认参数、可变参数。 文章目录 前言一、形式参数与实际参数的概念二、位置参数(也叫必需参数)三、关键字参数四、默认参数五、可变参数…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...