关于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+ ")。