UDP的通讯程序,其中要把Server和Client的接收和发送的数据以 数据长度(要求必须为int)+数据内容 (可以为char) 以二进制数据流的形式存储到各自的文件中。文件肯定为二进制文件。文件写入数据fp = fopen("客户端.bin","wb")。由于是wb,无法直接在文件末尾加数据,必须要将以前的数据也要保存下来,就要先进行一次read将原有数据保存在缓存区中,在fp = fopen("客户端.bin","wb")之后再写入。不过发现read出来的数据有问题,只读取了数据长度,数据长度后的00和数据内容都没有读取,read 的fp的指针只到数据长度就停止了。具体请看截图。求指导,怎样将数据完整的读出。程序如下,绝对无语法和赋值错误,应该是逻辑的问题,实在想不出来。
while(!feof(fp))
{
ch=fgetc(fp);
msg[count++]=ch;
} //读取原始数据,放入msg数组中
中间的程序都省略
fp = fopen("客户端.bin","wb"); //打开文件,必须存在,二进制存储
if(fp == NULL) {
printf("can not open file\n");
exit(0);
}
fwrite(msg,strlen(msg),1,fp); //写入原来的数据
fwrite(&sendinglen,sizeof(int),1,fp); //然后写入现在的数据长度
fwrite(buffer,sendinglen,1,fp); //最后写入数据内容
我认为一定是读取的问题,但是不知道该怎么弄,0A 00 00 00这种数据长度的结构,在while(!feof(fp)) 判断的时候就认为0A 后的00就是'\0',fscanf也一样,就判断结束了,请问该如何解决。在线等啊,解决了加分
我用的就是rb打开,读取的,而且查看的是fgetc能读二进制的。有没有什么读取方式是二进制写入追加的?我查了好像没查到。
追答不建议你使用fgetc,fgetc可以读二进制文件是没错,但二进制文件中有很多不是有效字符,处理起来就会出问题,比如0,10等控制字符
ab+ 为读/写打开一个二进制文件,位置指针移到到文件末位,可以添加也可以读;
rb+ 为读/写打开一个二进制文件,但此文件一定要存在
wb+ 为读/写新建一个二进制文件,会删除原有文件数据
上述方式是ANSIC规定的,不是所有的编译系统都支持的,你可以试一下
谢谢啦,直接就ab+,OK啦
本回答被提问者采纳你牛B了,把我后面想干什么都猜出来了,呵呵,用ab+打开文件就可以了,谢谢啦
c语言读取二进制数据文件
1、数据流:程序与数据间的交互是以流的形式进行。在C语言文件存取时,打开文件操作,关闭数据流。2、缓冲区:程序执行时,提供的额外内存以暂时存放数据。缓冲区作用是为了提高存取效率,内存的存取速度比磁盘快。3、文件类型:分为文本文件和二进制文件两种。补充:1、文本文件:字符编码的方式进行保存。
C语言 从一个二进制文件里读取一个结构体时出现如图的显示(我先前已经...
1、程序出现死循环了,文件运行成功了,但是所有属性都是0或者空,检查一下是不是再写循环代码的时候那个值的属性或者条件写错了,导致出现了死循环;2、看一下主键是不是调用数据里面填写正确,或者在带入的时候是不是单次书写正确,C语言需要区分大小写,如果不区分大小写系统不识别;3、程序使用调用...
弱弱的问个C语言的问题 关于二进制文件的读写
二进制方式很简单,读文件时,会原封不动的读出文件的全部内容,写的时候,也是把内存缓冲区的内容原封不动的写到文件中。而文本方式就不一样了,在读文件时,会将换行符号CRLF(0x0D 0x0A)全部转换成单个的0x0A,并且当遇到结束符CTRLZ(0x1A)时,就认为文件已经结束。相应的,写文件时,会将所有的...
c语言读取二进制数据文件
wt+ 读写打开或着建立一个文本文件;允许读写。at+ 读写打开一个文本文件,允许读或在文本末追加数据。ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。...
C语言读写二进制文件读取 大小端,该怎么解
fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。返回实际读取到的nmemb数目。详情参见上面的代码。另外就是大小端的问题了。关于大小端的具体解释网上有很多,在此不作解释。参考上面写的代码,我判断...
关于c语言读取二进制文件fread问题
当程序需要读取某个文件时,实际就是把数据读入内存由CPU运算,CPU首先去缓存中找寻,查找不到就会到内存中去读取同时复制到缓存中以便下次访问,这个时候速度自然很慢,当你第二次读取该文件时,缓存中已经存在,CPU再次访问这些数据就会变的非常快。这是和系统读取数据的方式有关的,并不是因为某个函数...
c语言写入的二进制文件再次打开出错
二进制文件是不能用文本方式正确查看的,能显示的那部分是二进制数据刚好是某字符的编码,没有对应字符编码的就用框框或一些古怪符号显示甚至什么也没有。你的文件不一定错,再用二进制打开后读出数据来才能验证是否正确。
C语言怎么读取二进制文件中的数据放到一个300×300的二维数组里面
用 fread 读取数据,函数原型是:size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );各参数意义,请查编译器帮助文件,这里就不开课了。300×300 的数组需要的内存量较大,可动态分配,或用 全局量。下面是程序例子。先建了一个2进制文件,里面存了300*300个float型...
C语言怎么编写一个程序读取任何二进制文件,并将文件内所有字节按相反排...
如果文件不大的话,可以定义一个数组,一次性将文件内容都读出来,然后从后向前写到新文件中,如果文件很大的话,就将文件指针定位到文件结尾的前一个字节处,循环读一个字节写入另一个文件,并将原文件指针往回移2个字节,直到将所有字节反向读取完成并写入。include <stdio.h> main(){ char c;FILE...
C语言二进制文件用记事本打开可以看到内容吗
二进制文件用记事本打开看可能出现乱码、或者看不见内容,可以使用UltraEdit或者EditPlus、HexEdit这些程序查看。