有关C语言 二进制文件写入和读取

CLASS class;//CLASS是定义的结构体类型
CLASS class;

……二进制文件已创建成功
fwrite(&class, sizeof(CLASS), 1, fp);
……
fread(&classtwo, sizeof(CLASS), 1, fp);
……

数据确实存入了二进制文件,但无法读取成功。我记得可以直接按结构体读写,这里为什么不可以?

请教前辈!

不知道你的fwrite和fread中间有什么代码,fwrite后,文件指针指向末尾,这时读是读不到东西的,必须使用fseek将指针移到最前面或是关闭文件后再重新打开。追问

写入后关闭了文件,再打开重新读,还是不对。

追答

从你提供的代码看是肯定没问题的,你最好是单步调试观察数据确定到底是哪个语句出现了问题。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-26
路过
第2个回答  2012-12-26
试试 fread((char*)&classtwo, sizeof(CLASS), 1, fp);
第3个回答  2012-12-26
是不是没用fseek函数, 或者重新打开

c语言读取二进制数据文件
步骤如下:1、数据流:程序与数据间的交互是以流的形式进行。在C语言文件存取时,打开文件操作,关闭数据流。2、缓冲区:程序执行时,提供的额外内存以暂时存放数据。缓冲区作用是为了提高存取效率,内存的存取速度比磁盘快。3、文件类型:分为文本文件和二进制文件两种。补充:1、文本文件:字符编码的方...

C语言怎么编写一个程序读取任何二进制文件,并将文件内所有字节按相反排...
如果文件不大的话,可以定义一个数组,一次性将文件内容都读出来,然后从后向前写到新文件中,如果文件很大的话,就将文件指针定位到文件结尾的前一个字节处,循环读一个字节写入另一个文件,并将原文件指针往回移2个字节,直到将所有字节反向读取完成并写入。include <stdio.h> main(){ char c;FILE...

c语言中wb,rb是什么意思
wb代表二进制模式文件,允许写入文件,rb代表二进制模式,允许读取文件。形态字符串都可以再加一个 b 字符,如 rb、w+b 或 ab+ 等组合,加入 b 字符用来告诉函数库以二进制模式打开文件。如果不加 b,表示默认加了 t,即 rt、wt,其中 t 表示以文本模式打开文件。由 fopen() 所建立的新文件会...

弱弱的问个C语言的问题 关于二进制文件的读写
linux操作系统不区分文本文件和二进制文件,只有在windows上才需要wb。你可以试验一下,到底默认是二进制还是文本的。二进制方式很简单,读文件时,会原封不动的读出文件的全部内容,写的时候,也是把内存缓冲区的内容原封不动的写到文件中。而文本方式就不一样了,在读文件时,会将换行符号CRLF(0x0D 0...

c语言里文件的读和写是什么意思
保存信息。读就是把信息从空间里拿出来,保存到变量里。写就是把变量里的内容放到空间里。注意:由于C语言是缓冲写,所以要在关闭或刷新后才能看到文件内容。电脑处理文本型文件和二进制型文件的速度不同。因为电脑只能识别二进制,所以在处理文本型文件时需先将其转换为二进制型文件。

C语言文件读写结构体里面的数据怎样存到磁盘文件上
结构体存储到磁盘文件,一般有两种方法,各有优劣,需要依照实际需求来选择。假定结构体格式为 struct test{ int a; float b;};1 以二进制方式存储。直接以二进制方式存储,参考代码如下:include <stdio.h>int main(){ struct test v = {1, 2.3}; FILE *fp; fp = fopen("...

c语言读取二进制数据文件
1、二进制文本使用fopen函数的二进制模式“rb”就可以打开。对于程序来说,不管后缀名如何,文件分为两种类型:文本文件和二进制文件。 C语言里有一系列文件操作函数。区分文本和二进制文件,需要在打开文件时设置不同的控制符mode的变量即可。2、fopen的函数原型:FILE * fopen(const char * path,const...

C语言读写二进制文件读取 大小端,该怎么解
我们来看看fwrite和fread,本来以为这个很麻烦,但是用过之后发现这个二进制文件读写才是最简单的。size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);fwrite()用来将数据写入文件流中。 stream为已打开的文件指针 ptr 指向欲写入的数据地址写入的字符数以参数size*nmemb来...

c语言打开文件,要实现读取再写入,用哪种打开方式?
r+ 以可读写方式打开文件,该文件必须存在。rb+ 读写打开一个二进制文件,只允许读写数据。rt+ 读写打开一个文本文件,允许读和写。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会...

C语言读写二进制文件与数据类型有什么关系?
不管是文本文件还是二进制,最终存到硬盘中都是二进制的,只不过在读的时候处理不一样,比如已写入一个字符串,那就得已字符串进行处理,如果写入的是一个int,或者double,就用int或者double类型处理。

相似回答