C、C++⽂件的读写与格式控制
⽂件读写
⽂件操作可分为⽂本⽂件、⼆进制⽂件读写
1.C语⾔读写
1.1读⽂本⽂件
int a; cha b[]=......
fopen("fileName, "r");
fscanf(filePtr, "%s,%d\n", a,b);
or fgets(...)
写⽂本⽂件
float c = ....
fopen(..........)
fprintf(filePtr, "\n%s, %d, %3.1f\n",b, a, c); %3.1f指保留三位有效数字,⼩数点保留⼀位,格式化为字符输出到⽂件1.2读⼆进制
fopen(fileName, "rb");
fread(...........)
写⼆进制
fopen(fileName, "wb");
fwrite(...........)
fread函数返回直接读取的字节数,对于C++的read函数则返回ifstream的引⽤,要获取其实际读取的字节数⽤gcount函数2.C++读写
good():检查是否打开,成功打开return TRUE
eof():是否到⽂件末尾,若到⽂件末尾retur TREUE
2.1读⽂本⽂件
ifstream fcin(fileName, ios::in); ⽤ ios_base::in也可以,ios::in是继承⾃ios_base::in
getline(fcin, )
line(......)
or )
(....)
or fcin >>
写⽂本⽂件
ofstream fcout(fileName, ios::out); ⽤ios_base::out⼀样,ios是从ios_base派⽣出来的
fcout <<
2.2读⼆进制⽂件
ifstream fcin(fileName, ios::in || ios::binary)
写⼆进制⽂件
ofstream fout(fileName, ios::out || ios::binary)
fout.write(....)
3.MFC读写
注意:
对于字符来说,其⼆进制表⽰与⽂本表⽰是⼀样的,对于数字来说,其⼆进制表⽰与⽂本表⽰存在很⼤差异;字符、数字都是存储其⼆进制,字符的⼆进制为其对应的ASCLL对应的值,数字的⼆进制就是其直接转为⼆进制的值。
对于以⽂本模式、⼆进制模式的输出,本质都是输出字符、数字对应的⼆进制,区别仅仅在于⽂本模式会将\n输出为\n与\r的组合,⽽⼆进制模式严格按照⼆进制输出,所以对于⽂本输出、⼆进制输出关
键在于其⽂本、⼆进制模式的选择,与函数⽆关,所以有的函数既可以输出⽂本形式⽂件,⼜可以输出⼆进制⽂件。⽐如write函数既可以在⽂本模式下输出(会将\n输出为\n\r),⼜可以在⼆进制模式下输出。(注意fprintf就只能在⽂本模式下输出,因为其是先格式化为⽂本后输出)
举例说明1:
C++的函数write(),⼆进制模式输出可以这样:(read函数与write函数对应,也可以在⽂本模式、⼆进制模式下使⽤,具体可见primer plus⽂件读写部分)
ofstream fcout(filePath, ios_base::out | ios_base::binary);
int x[3] {1, 2, 3};
fcout.write((char*)x, sizeof(int) * 3);
⽂本模式可以这样:
ofstream fcout(filePath, ios_base::out);
char x[3] {'a', '\n', 'b'};
fcout.write(x, sizeof(char) * 3);
举例说明2:
C++⽂件输出的<<;运算在⽂本输出模式下很好⽤,其后边可以直接跟float、int、double数字的类型,其会将他们转为对应的字符的ASCLL,最后将他们输出到⽂件。
ofstream fcout(filePath, ios_base::out);
char a[] = "abcdef";
int b = 1; int c = 2;
fcout << a << b << c;
fprintf格式举例说明3:
⽂本输出模式下,可以将int、float、double数字类型格式化到字符串中,输出这些字符串,就完成了对数字的⽂本化输出(同理可以想到>>在读取中的应⽤)
char a[100];
int n = 1;
sprintf(a, "n的值为%d", n);
fcout << a;
输出的格式控制
对输出的格式控制主要分为三种⽅法:控制符(也可作为函数使⽤,但不是成员函数)、set函数(也是成员函数)、其他成员函数,set函数功能最全,但是较为繁琐,部分可以⽤控制符代替。
以下为⼀些控制符与set函数的对照,节选⾃primer plus p751
还有setw、setpresicion、setfill控制符;fill()、precision()、width()成员函数也可以设置格式
例1:
fcout << hex 或 hex(fcout);
fcout.setf(ios_base::hex, ios_base::basefied);
例2:
fcout << setw(20); 或 setw(fcout)
fcout.width()
⼩数存放⽅式有浮点数(默认)、定点、科学计数法,默认的浮点计数精度指其总共位数,在定点、科学计数法下指其⼩数位数;设置例⼦:
setf():
fcout.setf(ios_base::fixed, ios_base::floatfied); fcout.presicion(3);
控制符:
fcout << fixed << setprecision(3);
设置浮点没有专门的字段,可以通过以下:
fcout.set(0, ios_base::floatfied);
或 fcout.unsetf(ios_base::floatfied)
或在fixed下 fcout.unsetf(ios_base::fixed);
或在scientific下 fcout.unsetf(ios_base::scientific)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论