当前位置:网站首页>文件操作(一)——文件简介与文件的打开方式和关闭
文件操作(一)——文件简介与文件的打开方式和关闭
2022-07-26 02:53:00 【Rising-person】
文章目录
前言
1.文件简介
2.文件打开函数fopen
2.1 文件类型指针(简称文件指针)
2.2 文件打开方式
2.3 文件的路径——相对路径与绝对路径
3.文件关闭函数fclose
4.打开文件实例
前言
我们在运行程序的时候会输入一些数据,而在我们关闭程序运行后,输入的数据将会丢失,我们怎样才能将输入的数据存储起来,在下次运行程序的时候,能够调用上一次的数据,这里我们就能想到将数据存储到文件当中,下次打开程序就可以调用文件中存储的信息。
文件简介
磁盘上的文件是文件,有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上文件。
程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序 (windows环境后缀为.exe)。
数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数 据的文件,或者输出内容的文件。
文件跟人一样,怎样才能找到文件,而文件名就是文件的唯一标识,以便用户识别和调用,构成文件名的3部分:文件路径+文件名主干+文件后缀 例如:c:\code\test.txt
其中 c:\code\test为文件路径
test:为文件名主干
.txt:为文件后缀
文件打开函数 - fopen
FILE * fopen ( const char * filename, const char * mode )实现打开文件的功能 ,相应参数:
const char * filename:需要打开文件的路径 const char * mode:文件打开方式
文件指针
缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE
每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。而每当调用fopen函数,如果打开成功就会返回一个FILE类型的指针,一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便,如果打开不成功就会返回一个NULL。
文件打开方式
| 文件使用方式 | 含义 | 如果指定文件不存在 |
| “r”(只读) | 为了输入数据,打开一个已经存在的文本文件 | 出错 |
| “w”(只写) | 为了输入数据,打开一个文件文本 | 建立一个新的文件 |
| “a”(追加) | 向文本文件尾添加数据 | 建立一个新的文件 |
| “rb”(只读) | 输入数据到内存,读取文件中的二进制内容 | 错误 |
| “wb”(只写) | 输出数据到文件中,将内存中的内容以二进制形式写入文件 | 建立一个新文件 |
| “ab”(追加) | 向一个二进制文件追加数据,追加的数据也会转化为二进制 | 错误 |
| “r+”(读写) | 为了读和写,打开一个文本文件 | 错误 |
| “w+”(读写) | 为了读和写,建立一个新文件 | 建立一个新文件 |
| “a+”(读写) | 打开一个文件,在文件尾进行读写 | 建立一个新文件 |
| “rb+”(读写) | 为了读和写打开一个二进制文件 | 出错 |
| “wb+”(读写) | 为了读和写新建一个二进制文件 | 建立一个新文件 |
| “ab+”(读写) | 打开一个二进制文件,在文件尾进行读和写 | 建立一个新文件 |
1.例:向文件写入数据
FILE* pf = fopen("d:\\users\\rich\\桌面\\test.txt", "w");注:若在d:\\users\\rich\\桌面\\test.txt路径下文件夹test.txt不存在,会直接创建该文件夹。
2.例:取出文件中的数据
FILE* pf = fopen("d:\\users\\rich\\桌面\\test.txt", "r");注:若在d:\\users\\rich\\桌面\\test.txt路径下文件夹test.txt不存在,fopen函数会返回一个空指针。
3.例:向文件夹写入二进制内容
FILE* pf = fopen("d:\\users\\rich\\桌面\\test.txt", "wb");注:若在该路径下的该文件夹中有内容存在,再次写入时会将文件原本的内容删除后再写入我所需要写入的内容。
由于fopen函数有可能返回空指针,在返回空指针的时候则无法访问所需要访问的文件,因为有可能该文件不存在,所以在使用fopen函数的时候需要判断其返回值是否为空指针。
if (pf == NULL)
{
printf("%s\n", strerror(errno)); //方法一
perror(NULL); //方法二
return 1; //失败则返回结束程序
}检测出为空指针打印错误:

文件路径
相对路径:此处简单理解为在存放代码的文件中直接创建的文本
FILE* pf = fopen("test.txt", "w");若原本文本不存在,在进行写操作的时候,会在存放代码的文件夹中自行创建一个名为test.txt的文本,在存放代码的文件夹中即可查看到。
绝对路径:没有在存放代码的文件夹中,比如我在桌面创建了一个test.txt的文本,右键单击属性,在位置一栏中就可以查看到路径,复制该路径,复制的路径中只要一个斜线,需要再加一个斜线将其转义,并添加上文本名,如下:

FILE* pf = fopen("d:\\users\\rich\\桌面\\test.txt", "r");
文件关闭函数 - fclose
int fclose ( FILE * stream );由于编译器打开文件数量的窗口有限,为了不浪费资源,在打开文件并完成需要的操作后需要将文件关闭。在使用时需要传文件指针。
fclose(pf); //关闭pf指向的文件
pf = NULL; //指针pf仍然存放着指向文件的地址,需要及时置空,不然会生成野指针,这样很危险正确实例:向文件写入字符串“abcdef”
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <errno.h>
int main()
{
//打开文件
FILE* pf = fopen("d:\\users\\rich\\桌面\\test.txt", "w");
//判断是否打开成功
if (pf == NULL)
{
printf("%s\n", strerror(errno));
//perror(NULL); //判断错误
return 1;
}
//对文件夹的操作,见下一章详解
fputs("abcdef", pf);
fclose(pf);
pf = NULL;
return 0;
}成功写入:

边栏推荐
- ERROR: could not extract tar starting at offset 000000000000020980+9231072+2
- Self-supervised learning method to solve the inverse problem of Fokker-Planck Equation
- 当点击Play以后,EditorWindow中的变量会被莫名其妙销毁.
- [steering wheel] use the 60 + shortcut keys of idea to share with you, in order to improve efficiency (live template & postfix completion)
- Personally test five efficient and practical ways to get rid of orders, and quickly collect them to help you quickly find high-quality objects!
- Pytorch的API总览
- 墨天轮高分技术文档分享——数据库安全篇(共48个)
- VOFA+ 串口调试助手
- From the annual reports of major apps, we can see that user portraits - labels know you better than you do
- How to effectively prevent others from wearing the homepage snapshot of the website
猜你喜欢

MySQL build websites data table

DFS Niuke maze problem

ES6 advanced - using prototype object inheritance methods

VOFA+ 串口调试助手

Vofa+ serial port debugging assistant

GAMES101复习:光栅化

Autojs cloud control source code + display

Three years of software testing experience, salary has been stuck at 10K, how to improve and develop automated testing?

循环与分支(一)

How to effectively prevent others from wearing the homepage snapshot of the website
随机推荐
Study notes of pytorch deep learning practice: convolutional neural network (Advanced)
AMD64 (x86_64) architecture ABI document:
Be highly vigilant! Weaponization of smartphone location data on the battlefield
图像识别(七)| 池化层是什么?有什么作用?
[C] Explain language file operation in detail
Yum install MySQL FAQ
第3章业务功能开发(删除线索)
AMD64(x86_64)架构abi文档:
[steering wheel] use the 60 + shortcut keys of idea to share with you, in order to improve efficiency (live template & postfix completion)
Shardingsphere data slicing
案例:使用keepalived+Haproxy搭建Web群集
26 points that must be paid attention to for stability test
EAM系统能帮助企业做什么?
MySQL build websites data table
富文本转化为普通文本
Uni app cross domain configuration
Information system project managers must recite the core examination site (50). The contract content is not clearly stipulated
Neo4j 导入csv数据报错:Neo4j load csv error : Couldn‘t load the external resource
Arthas view the source code of the loaded class (JAD)
ES6高级-利用构造函数继承父类属性