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

关于fread和fwrite的有关问题,挺着急的,大家帮下忙

2012-03-08 
关于fread和fwrite的问题,挺着急的,大家帮下忙同志们好:  我现在要做一个存储信息的文件,然后读出来,按二

关于fread和fwrite的问题,挺着急的,大家帮下忙
同志们好:
  我现在要做一个存储信息的文件,然后读出来,按二进制读写,但是有个奇怪的问题,请大家帮我解决一下。写文件的日志没有出现错误,看文件记录的开头和结尾的消息也对,但是在读的时候,总是读到某一条的时候read出来的length总是0,feeoer没有错误,也不是文件尾,但是就是读不出来了,总是0……下边是我的代码,请大家帮我想一下,我应该没有弄错阿。
这里是写的地方:
我先把buffer的长度作为int写到文件中,然后接着写buffer
fp   =   fopen(filepath, "w ");//这个是打开文件

//这个是写文件函数
int   serialSize   =   buffer的长度;
fwrite(&serialSize,sizeof(   int   ),   1,fp);
writeNum   =   fwrite(buffer,sizeof(   char   ),   serialSize,fp);
if(writeNum   ==   0)
{

}
else
{

}
//

fp   =   fopen(filepath, "r ");//这个是打开读的时候的文件

//这个是读文件函数
int   serialSize   =   0;
fread(&serialSize,sizeof(   int   ),   1,fp);
readNum   =   fread(buffer,sizeof(   char   ),   serialSize,fp);
if(readNum   ==   0)
{

}
else
{

}
//

读文件和写文件都是循环来用的,知道读写完关闭文件。

现在问题就是在读的时候循环执行到fread(&serialSize,sizeof(   int   ),   1,fp)的时候serialSize到某一条就会为0……
我试着写了几个文件,每个文件出现问题的位置不一样,有的是在90条,有的在100条等等。
但是单个文件出现问题的点总是一样的,如果说我写文件的时候出现错误的话,我在每个fwrite我的buffer的时候都会判断writenum是否为0,但是从来没有报错,请各位达人帮忙想想看。谢谢大家了,我挺着急的。

[解决办法]
...读写二进制文件应该是fopen(filepath, "wb ");和fopen(filepath, "rb ");的....你这里修改看看怎么样?
[解决办法]
函数申明: FILE *fopen(char *filename, char *mode)
函数用途: 打开一个文件
头 文 件: stdio.h
输入参数: filename: 文件名称
mode:打开模式,含义具体如下:
"r ":只读方式打开一个文本文件 "rb ": 只读方式打开一个二进制文件
"w ":只写方式打开一个文本文件 "wb ": 只写方式打开一个二进制文件
"a ":追加方式打开一个文本文件 "ab ": 追加方式打开一个二进制文件

"r+ ":可读可写方式打开一个文本文件 "rb+ ": 可读可写方式打开一个二进制文件
"w+ ":可读可写方式创建一个文本文件 "wb+ ": 可读可写方式生成一个二进制文件
"a+ ":可读可写追加方式打开一个文本文件 "ab+ ": 可读可写方式追加一个二进制文件

应该是你以文本文件打开,遇到0x0D(回车)这种控制符时读不出来的问题吧。
改成fopen(filename, "rb ")和fopen(filename, "wb ")或者只用fopen(filename, "rb+ ")。

热点排行