c++的文件流包含在与
其中头文件中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<
d. Close关闭
//out.close(); //关闭与文件联系
1 #include
2 #include
3 #include
4 using namespacestd;5 intmain(){6 //可将声明与文件联系合在一起: ofstream out("data.txt");
7 ofstream out;8 out.open("data.txt");9 stringstr;10 getline(cin,str);11 out<
问题:如何面对多行存储。 在windows中: /r/n才是换行,即:out<
方案1:
1 ofstream out;2 out.open("data.txt");3 stringstr;4 getline(cin,str);5 out<
7 getline(cin,str);8 out<
方案2:(好像\n也可)
1 ofstream out;2 out.open("data.txt");3 stringstr;4 getline(cin,str);5 out<
7 getline(cin,str);8 out<
2. 读取文件,可用ifstream
a) 先声明一个ifstream类型
b) Ifstream类型与文件名挂钩
c) 正式读取
d) 关闭
读法1:单个读取
1 #include
2 #include
3 #include
4 using namespacestd;5 intmain(){6
7 stringstr;8
9 ifstream in;10
11 in.open("baby.txt");12 in>>str;13 cout<
15 in>>str;16 cout<
18 return 0;19 }
输出结果:
显然这种读法只能单个读取(即:遇见空格 或 换行 结束读入)
读法2:整行读取(使用getline函数)
1 #include
2 #include
3 #include
4 using namespacestd;5 intmain(){6
7 stringstr;8
9 ifstream in;10
11 in.open("baby.txt");12
13 getline(in,str);14 cout<
16 getline(in,str);17 cout<
19 return 0;20 }
运行结果:
如果遇见汉字乱码问题,则是文件编码与系统编码不同而导致的,详情看下链接。