首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

fopen值得注意的有关问题

2013-07-04 
fopen值得注意的问题#include stdafx.h#include stdio.h#include iostream#include windows.husin

fopen值得注意的问题


#include "stdafx.h"
#include "stdio.h"
#include <iostream>

#include "windows.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{

FILE *fp;
fp = fopen("c:\\data.txt", "rb");
if(fp!=NULL)
{
fseek(fp,0,SEEK_END);
int nlen = ftell(fp);

fseek(fp,0,SEEK_SET);
char* p = new char[nlen+1];
fread(p,sizeof(char),nlen,fp);
fclose(fp);
p[nlen]=0;
printf("%s",p);

char c ='\t';
char s =' ';
char r ='\r';
char n ='\n';


FILE* fpw = fopen("c:\\data1.txt","wt");
if (fpw)
{
fwrite(p,sizeof(char),nlen,fpw);
fclose(fpw);
}
system("pause");
}
system("pause");

return 0;




data.txt里面内容

aa12bbdd131432
ccddff910
aa, bbc ddd
dda
aa


发现data1.txt 比data.txt多了几个字节
前面是二进制打开,后面是用文本方式去写
为啥会在每行多写一个char(13)就是\r的字符
为啥不一样呢



[解决办法]
这涉及到换行符的解释。
文本文件中换行符实际由\n\r两个字符构成。

rb方式读文本文件时,data.txt中的换行符原汁原味读出,得到"\n\r";
wt方式写文本文本时,会将待写字符串中的\n解释成\n\r写入文件,如果字符串中有\n\r,则写成\n\r\r

所以一般读写文件是用匹配方式,即rt对wt、rb对wb
[解决办法]
关于换行问题,在windows下是由换行+回车组成的,但是在linux下却只由一个单换行符。
[解决办法]
引用:
Quote: 引用:

关于换行问题,在windows下是由换行+回车组成的,但是在linux下却只由一个单换行符。

微软的系统是\r\n的,
别的系统不同,unix/linux只有\n,苹果系统只有\r

还是大神知道的多啊!!学习了
[解决办法]
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose  //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

热点排行