c++文件流操作的个人理解

头文件以及打开模式

头文件#include

ifstream  //以读取方式打开,默认模式为ios::in

ofstream //以写入方式打开,默认模式为ios::out|ios::trunc(类似fopenww+)

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.getcin.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

你可能感兴趣的:(c++文件流操作的个人理解)