头文件#include
ifstream //以读取方式打开,默认模式为ios::in
ofstream //以写入方式打开,默认模式为ios::out|ios::trunc(类似fopen的w与w+)
fstream //以读写方式打开,默认模式为ios::out|ios::in
关于函数的内容中默认已定义fstream file(“……”);实际应为fstream &.get();这种形式才对
默认构造函数为.open(),例:
fstream file(“1.txt”); //效果等同fstream file; file.open(“1.txt”);
打开模式有以下几种:
ios::in 以输入(读)方式打开文件;
ios::out 以输出(写)方式打开文件;
os::ate 初始位置:文件尾,文件打开后定位到文件尾;
ios::app 以追加的方式打开文件,所有输出附加在文件末尾;
ios::trunc 如果文件已存在则先删除该文件;
ios::binary 二进制方式,以二进制方式打开文件;
ios::nocreate 打开一个文件时,如果文件不存在,不创建文件;
ios::noreplace 打开一个文件时,如果文件不存在,创建该文件;
可以以多种模式打开文件,打开模式为枚举变量,值为0x01、0x04、0x08等,转为二进制后相隔一个位,所以可以用‘|’或者‘+’运算符来进行多模式并用,例
fstream file(“1.txt”,ios::out|ios::app); //以附加写方式打开文件
可通过流操作符”<<”来对文件流变量进行操作,默认以文本方式打开,若以文本模式流入数据到文件,数据会被格式化为字符格式,如
int i=100;
char str[20]=”hello”;
ofstream file(“1.txt”);
file << i; //执行后文件1.txt内会有文本内容“100”
file << str; //执行后文件1.txt内会有文本内容“hello”
若以读方式打开文件,有多个函数可以对打开的文件流进行操作,如
char i;
chat str[20];
ifstream file(“1.txt”);
file.get(i); //效果跟cin.get相似,此处等效于i=file.get()但返回值不一样
file.get(str,10,’\n’); //file.get()同样可以跟cin.get一样,最多传入三个参数(类型也相同)
file.getline(str,10,’\n’); //file.getline()也跟cin.getline()相似,最后一个结束符默认为‘\n’
//file.getline()会把结束符清除,下一局不会读到结束符,而get则会//留下结束符给下一次读取
file.get()与file.getline()的不同
message中的内容为:
小明 12 F
小红 11 M
char str[100];
std::ifstreamfile("./message.txt");
file.get(str,100);
std::cout << str;
std::cout << "next:\n" ;
file.getline(str,100,'~');
std::cout << str;
输出结果为以下
小明 12 Fnext:
小红 11 M
若把file.get(str,100);改为file.getline(str,100);
输出结果则是
小明 12 Fnext:
小红 11 M
可以理解为getline的文件光标比get偏移了一位;
当传入两个参数时,例
file.get(str,10); //默认回车符结束,当超出10个字符后,超出内容仍留在缓冲区给//下一次读取
file.getline(str,10); //当超出10个字符后,超出内容会保留在缓冲区,并且关闭文件流提取(关闭缓冲区输出),后面的get或者getline将无法接受超出的内容,可用file.clear();重置状态
file.get()、file.getline()的非法操作以及返回值跟cin.get、cin.getline一样,分别是读取不到任何东西,仅有’\0’,以及读取到的内容超出指定数目;
其他函数:
fstream file(“1.txt”);
file.seekg(10,ios::beg); //文件光标以文件头为原点偏移10位,ios::end为文件尾。ios::cur为当前位置(向后偏移)
file,good(); //打开文件成功则返回1,失败则为0;
file.eof(); //光标当前位置是否位于文件尾(是否读到文件尾),是则返回1,否则返回0;
参考网站: http://blog.csdn.net/kingstar158/article/details/6859379
http://blog.csdn.net/bichenggui/article/details/4600153