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

posted @ 2020-09-05 22:33  生活待我如初恋  阅读(2296)  评论(0编辑  收藏  举报