void C_Write(){
FILE *fp;
int i;
char ok[6]={'A','B','C',0x0A,'D','E'};
char c;
if(!(fp=fopen("zhang.txt","wb"))){
printf("failed to open
file!");
exit(0);
}
for(i=0;i<6;i++)
fputc(ok[i],fp);
fclose(fp);
}
void C_Read(){
FILE *fp;
char c;
if(!(fp=fopen("zhang.txt","r"))){
printf("failed to open
file!");
exit(0);
}
while(!feof(fp)){
c=fgetc(fp);
printf("0x%x ",c);
}
fclose(fp);
}
1.
当用text方式写文件时,只要遇到换行符0x0A都会自动转换成0x0D,0x0A并写入文件,这个0x0D,0x0A组合成规定的换行标志.如下图:
有很多软件,如windows自带文本文件编辑器默认是遇到0x0D,0x0A才换行显示,单独遇到0x0A显示为一块未知字符.
2.
当用binary方式写文件时则没有如此的转换动作,遇到什么字符就写什么,如遇到0x0A就直接写0x0A,如下图:
3.
当用text方式读文件时,如果遇到0x0D,0x0A的组合时会将其转换成只有0x0A,其他情况跟用binary方式一样,遇到什么字符就返回什么.
而在C++中,发现情况有一点不同,代码如下:
void CPP_Read(){
ifstream ifile("zhang.txt");
if(!ifile){
cout<
}
char c=ifile.get();
while(c!=0x0A){
cout<
c=ifile.get();
}
ifile.close();
}
void CPP_Write(){
char ok[6]={'A','B','C',0x0A,'D','E'};
ofstream ofile("zhang.txt");
if(!ofile){
cout<
}
for(int i=0;i<6;i++)
ofile<
ofile.close();
}
从运行结果看
1.
写的结果(ofile<
2.
读的结果同样不太一样,不同在于C++中text方式读时会将0x0D,0x0A全部舍去,也就是说如果还用c!=0x0A来判断一行是否结束是不正确的,这点很容易弄错,而binary方式则会将0x0D,0x0A的组合转换为只有0x0A,很奇怪
总之:
在C中:
1. text写0x0A会转换为写0x0D,0X0A;bianry写0x0A仍为0x0A
2.
text读0x0D,0x0A会转换为读0x0A;binary读0x0D,0x0A仍为0x0D,0x0A
在C++中:
1. text,binary写0x0A均会转换为写0x0D,0X0A
2.
text读0x0D,0x0A会一起舍去0x0D,0x0A,读单独0x0A也会舍去0x0A;binary读0x0D,0x0A将舍去0x0D;