当前位置:网站首页>[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
边栏推荐
- Comparison of indoor positioning technology
- MySQL数据库中delete、truncate、drop原理详解
- An article understands variable lifting
- An idea plug-in that doesn't work, but can install X
- PyQt5开发之QTableWidget表头自定义与美化(附源代码下载)
- Positioning of high precision welding manipulator
- Online yaml to XML tool
- LeetCode中等题之旋转函数
- 输入/输出系统
- AQS & ReentrantLock 实现原理
猜你喜欢
随机推荐
A simple theme of Typecho with beautiful appearance_ Scarfskin source code download
数据的删除和修改操作(mysql)
AQS & ReentrantLock 实现原理
thinkphp6+jwt 实现登录验证
线程的调度(优先级)
WordPress love navigation theme 1.1.3 simple atmosphere website navigation source code website navigation source code
怎么读书读论文
[learning] audio and video development from scratch (9) -- nuplayer
Listed on the Shenzhen Stock Exchange: the market value is 5.2 billion yuan. Lu is the East and his daughter is American
One click cleanup of pycharm and jupyter cache files under the project
分组背包呀
colorui 解决底部导航遮挡内容问题
An article understands variable lifting
1216_ MISRA_ C standard learning notes_ Rule requirements for control flow
[Effective Go 中文翻译] 第一篇
CSV column extract column extraction
为什么会存在1px问题?怎么解决?
基于TCP/IP协议的网络通信实例——文件传输
Talk about the basic but not simple stock data
ApplicationReadyEvent的使用