c++文件流总结(fstream、ofstream、ifstream)
c++的文件流包含在<fstream>与<iostream>
其中头文件中fstream包含三种数据类型,
ofstream 输出文件流,用于创建文件并且向文件中写入数据
ifstream 输入文件流,用于从文件中读取数据
fstream 文件流,有读写功能,即是以上两个的综合
ios::in |
打开文件用于读取。 |
ios::out |
打开文件用于写入。 |
ios::ate |
文件打开后定位到文件末尾。 |
ios::app |
追加模式。所有写入都追加到文件末尾。 |
ios::binary |
二进制方式 |
ios::trunc |
如果文件已存在则先删除该文件 |
一.先介绍几个函数
1.cin.getline( 参数1 , 参数2 , 参数3 ) ;
参数1 是即将要写入的对象,参数2 是写入的最大长度,参数3是结束字符。
参数2和参数3可缺省。
与getline要区分开,cin.getline服务的是char类型,属于istream流,而getline服务的对象是string类型,是属于string流,两者是不一样的函数。
getline(参数1,cin) // 参数1 是要写入的对象。
2.cin.ignore() //函数会忽略掉之前读语句所多余的字符。
二.代码实现
1. 写入文件,可用ofstream / fstream
a. 先声明一个ofstream类型
// ofstream out;
b. 将该类型与文件名挂钩
// out.open("地址+文件名",参数);
//此处参数可多选也可缺省,多选情况例如:out.open(“文件”,in | trunc)
c. 正式写入文件
//string str;
//getline1(cin,str); //读取一行
//out<<str; // 将变量str的内容写入文本中
d. Close关闭
//out.close(); //关闭与文件联系
1 #include<iostream> 2 #include<fstream> 3 #include<string> 4 using namespace std; 5 int main(){ 6 //可将声明与文件联系合在一起: ofstream out("data.txt"); 7 ofstream out; 8 out.open("data.txt"); 9 string str; 10 getline(cin,str); 11 out<<str; 12 return 0; 13 }
问题:如何面对多行存储。 在windows中: /r/n才是换行,即:out<<str<<"/r/n";
方案1:
1 ofstream out; 2 out.open("data.txt"); 3 string str; 4 getline(cin,str); 5 out<<str<<endl; 6 7 getline(cin,str); 8 out<<str<<endl;
方案2:(好像\n也可)
1 ofstream out; 2 out.open("data.txt"); 3 string str; 4 getline(cin,str); 5 out<<str<<"\r\n"; 6 7 getline(cin,str); 8 out<<str<<"\r\n";
2. 读取文件,可用ifstream
a) 先声明一个ifstream类型
b) Ifstream类型与文件名挂钩
c) 正式读取
d) 关闭
读法1:单个读取
1 #include<iostream> 2 #include<fstream> 3 #include<string> 4 using namespace std; 5 int main(){ 6 7 string str; 8 9 ifstream in; 10 11 in.open("baby.txt"); 12 in>>str; 13 cout<<str<<endl; 14 15 in>>str; 16 cout<<str<<endl; 17 18 return 0; 19 }
输出结果:
显然这种读法只能单个读取(即:遇见空格 或 换行 结束读入)
读法2:整行读取(使用getline函数)
1 #include<iostream> 2 #include<fstream> 3 #include<string> 4 using namespace std; 5 int main(){ 6 7 string str; 8 9 ifstream in; 10 11 in.open("baby.txt"); 12 13 getline(in,str); 14 cout<<str<<endl; 15 16 getline(in,str); 17 cout<<str<<endl; 18 19 return 0; 20 }
运行结果:
如果遇见汉字乱码问题,则是文件编码与系统编码不同而导致的,详情看下链接。
https://blog.csdn.net/Jinxiaoyu886/article/details/101350354