🍉内容专栏:【C/C++要打好基础啊】
🍉本文脉络:一到四为C++文件操作,五为C语言文件操作
🍉本文作者:Melon西西
🍉发布时间 :2023.2.4
目录:一到四为C++文件操作;五为C语言文件操作
一、什么是文件
程序运行时产生的数据都属于临时数据,程序一旦运行结束就会被释放,通过文件可以将数据持久化。此处讲如何将数据放入到磁盘文件当中。
我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。
1.程序文件
包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。
程序文件、数据文件(从文件功能的角度来分类的)
2.数据文件
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。
3.文本文件:
文件以文本的ASCLL码形式存储在计算机中
4.二进制文件:
文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们。
5.文件名(文件标识)
一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件名包含3部分:文件路径+文件名主干+文件后缀
例如: c:\code\test.txt
二、操作文件的三大类:
C++中对文件操作需要包含头文件<fstream>
ofstream写操作 ifstream读操作 fstream 读写操作
三、文本文件
3.1 写文件步骤:
先包含头文件 #include<fstream>
创建流对象:ofstream ofs; 或者 fstream类
打开文件 ofs.open("文件途径",打开方式);
写数据 ofs<<"写入的数据";
关闭文件 ofs.close();
文件默认存放在和项目相同的路径
void test1() { //包含头文件fstream //创建流对象 ofstream ofs; //指定打开方式 ofs.open("test.txt",ios::out); //写内容: ofs<<"今天天气真好"<<endl; }
3.2文件打开方式:
文件打开方式可以利用操作符配合使用。
3.3读文件:与写文件步骤相似,但是读取方式较多
先包含头文件 #include<fstream>
创建流对象:ifstream ifs; 或者fstream类
打开文件 ifs.open("文件途径",打开方式);
检查 利用is_open函数可以判断文件是否打开成功
读数据 四种方式读取
关闭文件 ifs.close();
读数据: //第一种 char buf[1024] = { o } ; while ( ifs >> buf ) { cout << buf << end1 ; } //第二种 char buf[1024] = { o } ; while ( ifs.getline(buf,sizeof(buf) )) { cout << buf << end1; } //第三种 string buf ; while ( getline(ifs,buf )) { cout <<buf <<endl ; } //第四种 不建议用第四种,没有前面的效率高 char c; while ( (c = ifs.get()) != EOF ) // EOFend of file { cout << c; }
四、二进制文件:打开方式要指定为 ios::binary
4.1写文件步骤 用write函数
#include<fstream> #include<string> class Person { char _Name[64]; //最好用char不用string int _Age; } void test1() { //创建流对象 ofstream ofs; //打开文件 ofs.open("person.txt",ios::out| ios :: binary); //或者合二为一 ofstream ofs("person.txt",ios::out|ios::binary); //写文件 Person p={"橘橘",20}; ofs.write(const char*)&p,sizeof(Person)); //关闭文件 ofs.close(); } int main() { test1(); return 0; }
4.2读文件 用read函数
#include<fstream> #include<string> using namespace std; class Person { char _Name[64]; //最好用char不用string int _Age; } void test1() { //创建流对象 ifstream ifs; //打开文件 ifs.open("person.txt",ios::in| ios :: binary); //或者合二为一 ifstream ifs("person.txt",ios::in|ios::binary); //判断文件是否打开成功 if(!ifs.is_open()) { cout<<"文件打开失败"<<endl; } //读文件 Person p; ofs.read((char *)&p,sizeof(Person)); cout<<p._Name<<p.Age<<endl; //关闭文件 ifs.close(); } int main() { test1(); return 0; }
二进制文件写完打开可能是乱码,但是正确读文件后还是正常的
五、C语言关于-文件的打开和关闭
5.1文件指针(文件类型指针)
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息〈如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE.
FILE* pf;//文件指针变量
5.2文件的打开和关闭(一定一定注意文件后缀!!)
如果找到了这个文件就打开,如果没有找到,显示没打开的原因。
5.文件的顺序读写
以写的形式打开会把文件原有的内容销毁重新创建
写文件:
读文件:把文件放到ch里,判断一下是否等于EOF,不等于则打印。
把结构体写入文件:
写在最后: