文件的读写操作1

本次将为大家介绍c++文件读写操作这个主题。为了方便大家对比查看,一些说明将写在代码注释中。下面的代码演示了文件的写入和读取操作,并介绍了getline的一个简单用法。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;


int main()
{
	string str;
// 	读写文件三步:
// 	1、创建读写对象即流;
// 	2、将对象即流与文件绑定;
// 	3、通过对象即流对文件进行读写操作
	ofstream fout;//创建流对象
	fout.open("1.txt");//与流对象绑定,文件若存在则用输入内容将原来内容覆盖,若无则创建。
	//ofstream fout("1.txt")//使用流对象的默认构造函数,实现1、2步的功能
	while(cin>>str && str != "q")//进行输入,输入为q时结束输入
		fout<<str<<";";//通过流对文件进行写操作。每个输入后加个";",后面介绍个getline功能
	/*
	当流对象过期或程序终止时,流会自动关闭。当然,也可以主动调用close函数,断开流与文件的连接。
	注意只是一端!!!程序与流那端的连接还在,包括程序对流的设置。
	*/
	fout.close();//断开流与文件的连接。
	fout.clear();//重置流状态

	ifstream fin("1.txt");	
	int count = 0;//统计输入字符个数,其实是遇到";"加1
	//getline(fin,str,';');//将第三个默认参数"\n"改为";",由读取整行变为遇到";"读取到str
	while (getline(fin,str,';'))//未到文件尾
	{		
		count++;
		cout<<count<<":"<<str<<endl;
	}
	cout<<"The total number of words is "<<count<<endl;
	return 0;
}

输入利用cin有包括但不限于遇到空格就读取输入缓冲区中内容的特性,将输入简洁化。程序的输出结果如下:


下面就程序进行几点说明:

1、每个流对象只可以在同一时刻关联一个文件:也就是说如果要同时打开两个文件,就必须为每个文件创建一个流对象;也可以将一个流对象关闭与文件的连接之后关联到另一个文件中。

2、close将流与文件之间的关联连接关闭后,有的编译器有时需要调用clear重置流状态,以便程序可以再次访问该文件。

	while(fin.get(ch))count++;
	fin.close();
	fin.clear();
	fin.open("1.txt");
如上述代码,若未使用clear重置流状态,则新的fin对象的输入缓冲区中将不会有内容。

3、getline第三个参数默认是‘/n’,也就是说遇到换行时将之前的内容读入,即读取整行内容。例子中将其改为‘;’,遇到‘;’进行读取。利用此特点统计出了输入字符的个数,重点并不是想要统计输入个数,只是给大家介绍getline的这种用法。在输出中并没有‘;’出现,也就是说它将‘;’从缓冲区中丢弃了。同理,在使用getline进行整行读取时,也会丢弃缓冲区中的换行符。顺便说下,get函数则不会,换行符仍将保留在输入缓冲区中。希望通过这个例子,加深大家对二者区别的理解。值得注意的是,通过此次设置,getline将会把换行符当成普通字符处理,也就是说文件中若有换行,则会直接输出,不会区别对待。大家可以人为的在文件中加个换行符,看下输出效果。

本人才疏学浅,其中若有错误,欢迎指正,不胜感激。

TO BE CONTINUED!

猜你喜欢

转载自blog.csdn.net/zhuyinglong2010/article/details/46409577