C++文件读写
2014-11-26 10:01
148 查看
C++中对文件进行读写时,如果定义即可读又可写的文件,那么在读写交互时,一定要注意流的坐标位置,否者可能操作会失效。下面的例子中,先对保存在文件中一系列成绩数据进行读入,然后分级别统计,最后将统计结果写在文件中。
ifstream, 类似istream, 有一个被称为get pointer的指针,指向下一个将被读取的元素。
ofstream, 类似 ostream, 有一个指针 put pointer ,指向写入下一个元素的位置。
fstream, 类似 iostream, 同时继承了get 和 put
我们可以通过使用以下成员函数来读出或配置这些指向流中读写位置的流指针:
tellg() 和 tellp()
这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++ 标准) ,就是一个整数,代表当前get 流指针的位置 (用tellg) 或 put 流指针的位置(用tellp).
seekg() 和seekp()
这对函数分别用来改变流指针get 和put的位置。两个函数都被重载为两种不同的原型:
seekg ( pos_type position );
seekp ( pos_type position );
使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。要求传入的参数类型与函数 tellg 和tellp 的返回值类型相同。
具体的读写文件的概念,参考下面链接的博客中的关于C++读写文件详解。点击打开链接
#include <fstream> //操作文件必写 #include <iostream> #include <cstdlib> //调用exit(1)需要包含cstdlib using namespace std; int main( ) { int a=0,b=0,c=0,d=0,e=0; double sum=0,avg=0,score; int stage; //ifstream infile("english.txt",ios::in); fstream inoutfile; inoutfile.open("english.txt",ios::out|ios::in); if (!inoutfile) { cerr<<"open error!"<<endl; exit(1); } for (int i=0;i<100;i++) { inoutfile>>score; sum+=score; stage=score/10; switch(stage){ case 10: case 9:++a;break; case 8:++b;break; case 7:++c;break; case 6:++d;break; case 5: case 4: case 3: case 2: case 1: case 0:++e; } } //inoutfile.clear(); inoutfile.seekp(0,ios::end);//此处很关键,必须先定义到文件数据的结尾才能成功写入数据。 avg=sum/100; inoutfile<<"\naverage"<<avg<<endl; inoutfile<<"100~90:"<<a<<endl; inoutfile<<"89~80:"<<b<<endl; inoutfile<<"79~70:"<<c<<endl; inoutfile<<"69~60:"<<d<<endl; inoutfile<<"59~0:"<<e<<endl; inoutfile.close(); return 0; }
获得和设置流指针(get and put stream pointers)
所有输入/输出流对象(i/o streams objects)都有至少一个流指针:ifstream, 类似istream, 有一个被称为get pointer的指针,指向下一个将被读取的元素。
ofstream, 类似 ostream, 有一个指针 put pointer ,指向写入下一个元素的位置。
fstream, 类似 iostream, 同时继承了get 和 put
我们可以通过使用以下成员函数来读出或配置这些指向流中读写位置的流指针:
tellg() 和 tellp()
这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++ 标准) ,就是一个整数,代表当前get 流指针的位置 (用tellg) 或 put 流指针的位置(用tellp).
seekg() 和seekp()
这对函数分别用来改变流指针get 和put的位置。两个函数都被重载为两种不同的原型:
seekg ( pos_type position );
seekp ( pos_type position );
使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。要求传入的参数类型与函数 tellg 和tellp 的返回值类型相同。
具体的读写文件的概念,参考下面链接的博客中的关于C++读写文件详解。点击打开链接