当前位置:网站首页>[C语言] 文件操作《一》
[C语言] 文件操作《一》
2022-04-23 07:23:00 【沙漠下的胡杨】
个人主页:欢迎大家光临——>沙漠下的胡杨
各位大帅哥,大漂亮
如果觉得文章对自己有帮助
可以一键三连支持博主
你的每一分关心都是我坚持的动力
![]()
: 本期重点:文件操作相关知识
希望大家每天都心情愉悦的学习和工作。
什么是文件呢?为什么要有文件呢?文件名是什么?
磁盘上的文件是文件,但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。程序文件:包括源程序文件(后缀为 .c ) , 目标文件( windows 环境后缀为 .obj ) , 可执行程序( windows 环境后缀为.exe )。数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件这就叫做文件。我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。 使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化,这就是我们为什么使用文件。一个文件要有一个唯一的文件标识,以便用户识别和引用,文文件标识包含3 部分:文件路径 + 文件名主干 + 文件后缀,一般我们也把文件标识叫做文件名。
流的概念:
流是一个系统与一个程序之间形成的一个通道。二者是一对一个关系,流表达了二者之间可以互动的能力。所谓的“ANSI C程序运行时系统必须提供三个流,stdin,stdout,stderr”,就是说系统必须提供这三种“通道”,即
1,程序与标准输入(默认键盘)之间的通道 stdin
2,程序与标准输出(默认显示器)之间的通道 stdout
3,程序与终端(默认也是显示器)之间的通道 stderr
还有我们要今天重点谈的文件流,用FILE*的指针来指向内存进行后续操作。
文件的打开和关闭
文件在读写之前应该先 打开文件 ,在使用结束之后应该 关闭文件 。 在编写程序的时候,在打开文件的同时,都会返回一个FILE* 的指针变量指向该文件,也相当于建立了指 针和文件关系。 ANSIC 规定使用fopen函数来打开文件,fclose 来关闭文件。![]()
![]()
![]()
fopen前面的是文件名,后面需要一些特定的字符串才可以,而fclose只需要关闭文件指针变量即可。
文件读写操作
我们仅仅知道怎么打开和关闭文件是不行的,我们还应知道怎么进行文件读写。
上面的就是常用的文件操作函数
下面我们实际操作下:
把数字0~9写入文件:
int main() { FILE *p = fopen("胡杨.dat", "w"); if (NULL == p) { perror("main:"); exit(-1); } for (char i = '0'; i <= '9'; i++) { fputc(i,p); } fclose(p); p = NULL; return 0; }
其中打开文件使用只写的形式 "w" ,写入字符使用了fputs函数,然后用了循环把0~9每个字符分别插入文件。
读出文件的内容
int main() { FILE *p = fopen("胡杨.dat", "r"); if (NULL == p) { perror("main:"); exit(-1); } char a[15] = { 0 }; fgets(a, 11, p); puts(a); fclose(p); p = NULL; return 0; }
这里有个小问题,为什么fgets函数中要使用11呢?一共就10个数字,要读11次?
因为默认拷贝 '\0' ,就是把字符串结束标志也拷贝啦,可以通过调试看出来。
可以看出,如果是拷贝10个时,那么就只拷贝到8就停止啦,也就是最后一个会默认拷贝 '\0'
所以使用fgets时,要比实际拷贝的元素多1,也就是说,你要拷贝10个元素,那么fgets中应该写11。
以二进制读写
我们想在文件中写入一些保密的文件,可以在文件中以二进制写入。
下面我们以结构体为例,是为了方便观察:
typedef struct stu { char name[20]; int age; int ID[10]; }stu; int main() { FILE *p = fopen("树下.dat", "wb"); if (NULL == p) { perror("main:"); exit(-1); } stu s1 = { "胡杨树下", 18, { 1, 2, 3, 4, 5, 6, 7, 8, 9 } }; fwrite(&s1, sizeof(s1), 1, p); fclose(p); return 0; }
二进制写入,我们看不懂,但是文件是知道的。
让我们用二进制打开的。
int main() { FILE *p = fopen("树下.dat", "rb"); if (NULL == p) { perror("main:"); exit(-1); } stu s2 = { 0 }; fread(&s2, sizeof(s2), 1, p); fclose(p); return 0; }
这样可以通过,二进制读出,文件是记得。
注意事项
1.首先我们要知道一个文件进行操作时,首先要考虑打开方式,是只读还是只写还是其他的方式。
2.判断文件是否打开成功。
3.要在判断怎么写入文件,是逐个输入还是按行输入,或者输出,这些使用的函数不一样。
4.在最后要关闭文件。
下期预告:
下期接着讲解文件系列的知识。
下期精彩~!~!~!

版权声明
本文为[沙漠下的胡杨]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_64770095/article/details/124341622
边栏推荐
- stm32以及freertos 堆栈解析
- WordPress love navigation theme 1.1.3 simple atmosphere website navigation source code website navigation source code
- MySQL数据库中delete、truncate、drop原理详解
- AAAI 2022招募讲者啦!!
- php生成短链接:将数字转成字母,将字母转成数字
- 谈谈那些基础但不简单的股票数据
- 华硕笔记本电脑重装系统后不能读取usb,不能上网
- [Effective Go 中文翻译] 第一篇
- 网赚APP资源下载类网站源码
- Campus transfer second-hand market source code download
猜你喜欢

An article understands variable lifting

【Appium】测试时遇到手机内嵌H5页面的切换问题

mysql查询字符串类型的字段使用数字类型查询时问题

关于ORB——SLAM运行中关键帧位置越来越近的异常说明

ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建

WordPress love navigation theme 1.1.3 simple atmosphere website navigation source code website navigation source code

The whole house intelligence bet by the giant is driving the "self revolution" of Hisense, Huawei and Xiaomi

Install MySQL for Ubuntu and query the average score
![[learning] audio and video development from scratch (9) -- nuplayer](/img/62/20b0d80088181fb6ff1fe842500c0a.png)
[learning] audio and video development from scratch (9) -- nuplayer

CGM优化血糖监测管理——移宇科技亮相四川省国际医学交流促进会
随机推荐
分组背包呀
基于TCP/IP协议的网络通信实例——文件传输
搜一下导航完整程序源码
ApplicationReadyEvent的使用
ASAN 极简原理
Briefly describe the hierarchical strategy of memory
AAAI 2022 recruit speakers!!
An article understands variable lifting
Planification du mouvement du manipulateur dans l'assemblage 3c
WordPress love navigation theme 1.1.3 simple atmosphere website navigation source code website navigation source code
npm安装yarn
多目视觉SLAM
Distributed service governance Nacos
The whole house intelligence bet by the giant is driving the "self revolution" of Hisense, Huawei and Xiaomi
PHP high precision computing
Qt利用QtXlsx操作excel文件
[appium] encountered the problem of switching the H5 page embedded in the mobile phone during the test
idea:使用easyYapi插件导出yapi接口
freertos学习02-队列 stream buffer message buffer
1216_ MISRA_ C standard learning notes_ Rule requirements for control flow






