c++文件流、string流

一、文件输入输出

1、除了继承自iostream类型的行为之外,fstream中定义的类型还增加了一些新的成员来管理与流关联的文件

fstream fstrm(s);
//创建一个fstream并打开名为s的文件,其中s可以是string也可以是C风格字符串指针
fstream fstrm(s, mode);         //和前一个构造函数类似,但按指定模式打开文件
fstrm.open(s);        //打开名为s的文件,并将文件与fstrm绑定
fstrm.close();        //关闭与fstrm绑定的文件,并返回void
fstrm.is_open();      //判断与fstrm的文件是否成功打开且尚未关闭

2、每个流都有一个关联的文件模式,用来指出如何使用文件

in        //读方式打开
out       //写方式打开
app       //每次写操作前均定位到文件末尾
ate       //打开文件后立即定位到文件末尾
trunc     //截断文件
binart    //以二进制方式进行IO

3、用open打开文件或用文件名构造文件流对象时,都可指定文件模式

4、对文件模式有以下规定

(1)、只可对ofstream或fstream对象设定out模式;只可对ifstream或fstream对象设定in模式

(2)、ifstream关联的文件默认以in模式打开;ofstream关联的文件默认以out模式打开;fstream关联的文件默认以in和out模式打开

5、输入输出重定向

freopen("example.txt", "w", stdout);        //c

二、string流

1、sstream中定义的类型还增加了一些成员管理与流相关联的string

sstream strm(s)    //strm是一个sstream对象,保存string s的一个拷贝,此构造函数是explict的
strm.str()         //返回strm所保存的string的拷贝
strm.str(s)        //将string s拷贝到strm中,返回void

2、当我们的某些工作是对整行文本进行处理,而其他一些工作是处理行内的单词时,可以使用istringstream;当我们逐步构造输出,希望最后一起打印时,可以用ostringstream

三、具体应用

fstream iof("gpa.dat", ios::in | ios::out | ios::binary);    //指定文件模式
string line;
while (getline(iof, line))     //getline从文件读行
{
	name = line;
	getline(iof, line);
	double a, b, aN = 0, bN = 0, gpa;
	istringstream is(line);        //将line放到is流中
	int n = 4;
	cout << "GPA for " << name << " = ";
	while (n--)        //由于未知个数(最多4个),所以用is来输入
	{
		is >> a >> b;
		aN += a;
		bN += b * a;
	}
	gpa = bN / aN;
	cout << fixed << setprecision(2) << gpa << endl;
}
ifstream inFile;        
inFile.open("plaintext.txt");    //文件打开
ofstream outFile;
outFile.open("ciphertext.txt");
char ch;
while (!inFile.eof())
{
	ch=inFile.get();        //读取、输出单个字符
	outFile.put(ch + 2);
}
ifstream in;
char b1, b2, b3;
in.open("image.jpg", ios::binary);
in.seekg(12, ios::beg);        //
in.read((char*)&b1, 1);//数据块输入,对于非字符数据块要强转为字符指针,第二个参数是数据大小
//write是块输出,参数与read相似
in.seekg(48, ios::beg);//用于文件定位,可以随意移动到指定位置;seekp用于文件输出流对象
in.read((char*)&b2, 1);
in.seekg(79, ios::beg);
in.read((char*)&b3, 1);
cout << hex << ((b1^b2^b3) & 0x000000ff) << endl;
ioFile.open("object.dat", ios::in | ios::out | ios::trunc | ios::binary);
Rectangle r1, r2(2, 2), r3(3, 3), r4(4, 4), r5(5, 5);
ioFile.write(reinterpret_cast<char*>(&r1), sizeof(Rectangle));    //同上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值