参考链接:https://blog.csdn.net/freeking101/article/details/60959624
#include //io stream
#include //f stream
#include //i stream
#include //o stream
//……
通过上面的4个头文件,大家不难发现,C++有个stream类,所有的I/O都以stream为基础
cout<<"Hello";//<<
向流输出数据
<<为插入器
平时我们想要输出一个东西时,会有一个自带的输出流,即cout
cout=c+out//c++输出流
那么我们cout<<"Hello"就会将Hello输出到标准输出流
int x;
cin>>x;//>>
流中输入数据
>>为析取器
析取器一般指的是键盘,所以上面代码中,表示从键盘读取一个int类型的数字
理解了插入器和析取器,下面来看看stream的几个头文件
ofstream:输出流(写)
ifstream:输入流(读)
fstream:文件操作流(可读写)
今天讲的是文件操作,所以fstream为主角(主角光环登场!)
fstream这个头文件最拿手的就是读写操作辣~
打开一个文件,对它进行任何操作,实际就是对该文件所做的操作
温馨提示:
ios::out 文件以输出(写)方式打开
ios::in 文件以输入(读)方式打开
ios::ate 初始位置:文件尾
ios::app 所有输出附加在文件末尾
ios::trunc 如果文件已存在则先删除该文件
ios::binary 二进制方式
这六种东西可以根据自己的需要自行挑选,可以用|
把以上属性连接起来
如:ios::in|ios::app
打开方式
第一种
……我忘了,副主角好像是ifstream和ofstream
因为它们是读写操作
#include //这个要加,因为ifstream和ofstream在这里
#include //主角
using namespace std;
int main()
{
ifstream infile;
infile.open("D:\\安安.txt",ios::out|ios::app|ios::binary);
return 0;
}
第二种
只有一个打开方式未免低调了一点
#include
#include
using namespace std;
int main()
{
ifstream file("D:\\安安.txt",ios::out|ios::app|ios::binary);
return 0;
}
还有更多的打开方式,这里不再做详细解释
没啥好说的
当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。关闭文件需要调用成员函数close(),它负责将缓存中的数据排放出来并关闭文件。
不关闭文件会……丢失!
ofstream infile;
infile.close();
这里我们已经知道了如何打开文件
辣么怎么读文件呢
新副主角:assert
这是一个判断路径是否有错的文件,一蛋你路径写错了,辣么它就会……报错!
如果路径写的对,继续往下运行
具体用法如下
assert(infile.is_open());
一句话,就可以判断路径是否有错
判断路径是否有错知道了,辣么怎么读文件呢,你扯了半天
(800米的大刀早已饥渴)
while循环即可解决
行行读取(string)
#include
#include
#include
#include
#include //我表示今天这个副主角我不欢迎,但要用的还要用
using namespace std;
int main()
{
ifstream infile;
infile.open("D:\\安安.txt",ios::out|ios::app|ios::binary);//打开文件
assert(infile.is_open());//检测路径是否有错
string s;//字符串为一行
while(getline(infile,s))//get每一行
{
cout<<s<<"\n";//输出后就换行
}
return 0;
}
辣么我们的读文件这块部分就告一段落
无论是读还是写文件,都要打开或创建文件
那么刚说了ifstream是输入流,它登场!
ifstream outfile;
outfile.open("D:\\txt.txt",ios::in||ios::app||ios::binary);//写入文件就要ios::in
这里有个容易混淆的地方,即
我们说<<
是插入器,>>
是析取器,那么我们要写入的时候要用到哪个呢
这里给大家一个思考
Round 1
甲:我觉得应该用>>
,因为你要写入一个文件嘛,肯定是要用键盘写入啊
甲说服率:53%
乙:我不赞同,因为终究是要把你写入的东西存到文件里的,这个步骤你还需要动键盘?
甲乙各占50%
Round 2
甲:存入到文件嘛,你是不是要把每一行存入到这个文件,我……(好像理亏)
甲说服率:21%
乙:这个时间根本不用动键盘,只不过是系统帮你存到这里去喽
乙说服率:100%
赢主:乙
所以使用插入器是正确的
ifstream是写,所以
ifstream outfile;
string write;
outfile<<write;
outfile.close();//关闭文件流
EOF表示是否到达文件尾,是则返回非0直,否返回0值
具体用法
if(in.eof())ShowMessage("停止!");
exit表示终止程序,同时关闭缓冲区剩余的数据输出并关闭所有已经打开的文件
参数:传参0或非0
参数含义
传0表示程序正常停止
不传0表示程序异常停止