2 zlp1992 zlp1992 于 2014.04.13 20:51 提问

C语言中的fread与fwrite问题

我自己自定义了一个结构体
typedef struct histgramData
{
CString picPath;//图片路径
CvHistogram value;//图片的直方图特征
}CHistogramData;
然后使用fwrite将其写入文件
FILE *fp;
if((fp=fopen("histogram.dat","a+b"))==NULL)//以追加方式打开二进制文件
{return false;}
CHistogramData hd;
hd.value=value;
hd.picPath=picPath;
fwrite(&hd,sizeof(hd),1,fp);
fclose(fp);
接着我用fread函数将其中的数据读出
FILE*fp;
CHistogramData histData;//用于保存从文件中读出的模板
CHistogram hist;//直方图对象
fp=fopen("histogram.dat","rb");
int count=0;
while(count<=9 && (fread(&histData,sizeof(histData),1,fp)!=0))//先一次性读取前十个模板数据
{
double similarity=hist.cmpHistogram(histData.value,*value);
CString temp;
temp.Format("%s%lf",histData.picPath,similarity);
MessageBox(temp);
count++;//计数器加1
}
问题是这样的,当我第一次写入一个CHistogramData数据时,能够正常读出来,但当我再次去读时,就出问题了,我怀疑是不是第一次读使用fread对原文件有影响;第二个问题是如果我第一次一次性写入多个CHistogramData数据时,读出数据就会失败,请问这是怎么回事?

1个回答

shen_wei
shen_wei   Ds   Rxr 2015.10.14 14:18

fread 读完数据后,记得fseek移动文件指针。。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C 语言中fread()和fwrite()用法
C 语言中的fread 和fwrite 一般是成对出现的,它们一般用来读写一个字符,也可以用来读写一个字符串,还可以用来读取一组数据.用法: fread(指向数据的指针,数据块的大小,要读取的数据块数目,文件指针) e.g:fread(rp,size,n,fp) 如果读取成功,返回值应该为n rp指的是要读取的数据的首地址, size 是要读取的数据块的(字节数)大小, n表示要读取的数据块数目
C语言: fwrite和fread函数的用法小结 (网上摘抄,方便以后查询)
转自:http://purpleroom.blog.sohu.com/133812394.html fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。 [cpp] view plain copy  print? #include    size_t fread(vo
C语言函数fread() , fwrite() ,fseek()用法分析
网上已经有不少关于c语言函数fread() 和fwrite() 用法分析的文章,在此将这两个函数的用法写下来,是为了巩固所学,加深印象,也为了日后方便查询复习比较,如果能帮助到某些朋友,则是意外的惊喜。 fwrite()函数的意义是将某二进制数据写到指定的 文件流。函数的原型为:   size_t fwrite (const void *buffer, size_t size, size_t
C语言中fread(),fwrite(),fseek()用法和功能
1.用法:int fread(void *buffer,int size,int count,FILE *fp);int fwrite(void *buffer,int size,int count,FILE *fp);2.功能:fread()──从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中; buffer是存放读入数
fopen()、fwrite()、fread()函数使用说明与示例
fopen()函数: 1.作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针。 2.函数原型: FILE * fopen(const char * path,const char * mode); -- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt" -- mode: 文件打开方式,例如:
C 语言 fwrite 和 fread 文件读写操作示例
#include int main() { FILE* pFile; float buffer[] = { 2.0 , 3.0 , 8.0 }; pFile = fopen("myfile.bin" , "wb"); // 打开文件写操作 fwrite(buffer , 1 , sizeof(buffer) , pFile); // 把浮点数组写到文件 myfil
C语言中的fread和fwrite
C语言提供fread和fwrite这两个文件读写函数,如果文件以二进制打开,用fread和fw rite函数就可以读写任何类型的信息。fread用来从指定文件中读取数据项,而fw rite用来把数据项写到指定文件。格式分别是: fread ( buffer, size, cou
C语言的二进制IO函数fread()和fwrite()
C语言的二进制IO函数fread()和fwrite() 图片来源-百度图片 之前的fprintf()、fscanf()、fgets()和fputs()等标准I/O都是面向文本的,用于处理字符和字符串。例如,下面的代码:double num=1./3; fprintf(fp,"%f",num);把num存储为8个字符;0.333333。使用%0.2f转换说明将其存储为4个字符:0.33,用%0
read/fread write/fwrite 的区别
fread就是通过read来实现的,fread是C语言的库,而read是系统调用。 差别在read每次读的数据是调用者要求的大小,比如调用者要求读取10个字节数据,read就会读10个字节数据到数组中。而fread不一样,为了加快读的速度,fread每次都会读比要求更多的数据,然后放到缓冲区中,这样下次再读数据只需要到缓冲区中去取就可以了。缓冲区(位于内存中)相当于磁盘的一个缓存,因为在内存中的
fread函数和fwrite函数的用法
fread函数和fwrite函数 1.函数功能   用来读写一个数据块。 2.一般调用形式   fread(buffer,size,count,fp);   fwrite(buffer,size,count,fp); 3.说明   (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。   (2)size: