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

C++读取资料内容后,结尾会多一些东西

2012-08-10 
C++读取文件内容后,结尾会多一些东西如题,用C++读取文件的内容,调用另一个方法写到另一个文件中,为什么会

C++读取文件内容后,结尾会多一些东西
如题,用C++读取文件的内容,调用另一个方法写到另一个文件中,为什么会在结尾莫名其妙的多一些内容呢?
读文件方式:
FILE *fp;
char * bt = NULL;
int fileLen;
if((fp = fopen(cpjyxxPath,"rb")) != NULL) {
fseek(fp,0,SEEK_END);
fileLen = ftell(fp);
bt = new char[fileLen];
fseek(fp,0,SEEK_SET);
if(bt != NULL) {
fread((char *)bt,1,fileLen,fp);
}

}
else{
cout<<"file not found!"<<endl;
return -23;//文件不存在
}

调用writeFile(bt,rkzl,userId,u_password)方法,保存文件
const int __stdcall wsf_writeFile(char* cpjyxx,char* rkzl,char* userId,char* u_pwd){
int s = 0;
FILE *fp2;
//如果路径中的文件夹不存在则不能保存文件信息
if((fp2=fopen("d:/aa.xml","wb"))==NULL)
{
printf("cant open the file");
fp2 = NULL;
s = 1;
//exit(0);
}else{
fwrite(cpjyxx,1,strlen(cpjyxx),fp2);
fclose(fp2);
}
return s;
}

原文件内容:
<?xml version="1.0" encoding="UTF-16LE"?>
<aa>
<bb>
<b1>b1</b1>
<b2>b2</b2>
<b3>b3</b3>
<b4>b4</b4>
<b5>b5</b5>
<b6>b6</b6>
<b7>b7</b7>
<b8>b8</b8>
<b9>b9</b9>
<b10>b10</b10>
</bb>
</aa>

写入另一个文件的内容:
<?xml version="1.0" encoding="UTF-16LE"?>
<aa>
<bb>
<b1>b1</b1>
<b2>b2</b2>
<b3>b3</b3>
<b4>b4</b4>
<b5>b5</b5>
<b6>b6</b6>
<b7>b7</b7>
<b8>b8</b8>
<b9>b9</b9>
<b10>b10</b10>
</bb>
</aa>es\Syb7



[解决办法]

C/C++ code
if((fp2=fopen("d:/aa.xml","wb"))==NULL)
[解决办法]
你没有写完整!!

你写的时候把文件长度传进去啊,strlen求的是字符串的长度。既然是按二进制读写,那么写的时候就应该带着长度。
[解决办法]
读取xml文件这样读的话不是太好,毕竟人家是有格式的。整个解析库吧
[解决办法]
bt = new char[fileLen+1](); //没结束符。。
[解决办法]
探讨

C/C++ code

if((fp2=fopen("d:/aa.xml","wb"))==NULL)


改成
C/C++ code

if((fp2=fopen("d:/aa.xml","w"))==NULL)


试试

[解决办法]
C/C++ code
if ((fp = fopen("USER.TXT", "rb")) != NULL) {        fseek(fp, 0, SEEK_END);        fileLen = ftell(fp);        char * bt = new char[fileLen+1];        fseek(fp, 0, SEEK_SET);        if (bt != NULL) {            fread(bt, 1, fileLen, fp);            fwrite(bt,1,fileLen,fp2);        }    }
[解决办法]
bt = new char[fileLen+1]();空间申请多一个终止符,空间在memset(bt,0,fileLen+1)制空
[解决办法]
单步调试和设断点调试是程序员必须掌握的技能之一。

[解决办法]
String Data = IO::File::ReadText(cpjyxxPath);

热点排行