为什么二进制文件不能读取
A. 如图,请问在labview中读取二进制文件这个错误是为什么
“读取二进制文件”函数的“数据类型”接线端弄错了。
比如你文件里存了一个{double和U8组成的}簇,是8+1共9个字节。
但是你程序里的数据类型弄成了一个{double和i32组成的}簇,是8+4共12个字节,程序在文件中读到9个字节之后还需要继续读,直到读到12个字节,但是文件已经到达结尾了,于是就提示这个错误啦。
B. Bin二进制文件读取问题
二进制的文件一般正常情况下是不能直接读出来的哦,用一般的软件能打开文件,但也只能一段一段的读,再说每个软件里的数据库可能都是加了密的。不一定能解得开。
C. c++ 从二进制文件里 无法读出数据 并显示到屏幕上,求大神解答
试一下把生成文件和读取文件的两段代码都开启并运行, 你会发现这个程序不会报错。为什么呢?
string 类并非单纯的char数组,里面有其他C++标准库用来实现string类各种方便功能所需的变量。string类会自己动态分配一块内存用来存储你的信息。这段内存的位置在每次运行程序的时候不同。 你在序列化你的string的时候,他会把string内部记录内存地址变量也序列化。两次运行,如果分配到的动态内存地址不同, 你的ok类在调用destructor的时候就会试图destruct string name, 然而name里面的地址是错误的,所以就会在释放内存的时候出错。
D. fread函数为什么读取二进制文件会出问题
在读写二进制文件的时候,必须确保文件的打开形式是以 二进制读写的形式打开的, 即:文件的打开形式必须是 "rb", "wb" 要不然,读写数据的时候,就会出现错误。
函数使用说明:
FILE * fopen(const char * path,const char * mode);
参数path字符串包含欲打开的文件路径及文件名,
参数mode字符串则代表着流形态。mode有下列几种形态字符串:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
rb+ 读写打开一个二进制文件,只允许读写数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。
有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。
返回值
文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中
附加说明
一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。
fread函数和fwrite函数
1.函数功能
用来读写一个数据块。
2.一般调用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
3.说明
(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。
(2)size:要读写的字节数;
(3)count:要进行读写多少个size字节的数据项;
(4)fp:文件型指针。
E. 为什么有些二进制文件读取不出东西
试一下把生成文件和读取文件的两段代码都开启并运行,
string 类并非单纯的char数组,里面有其他C++标准库用来实现string类各种方便功能所需的变量。string类会自己动态分配一块内存用来存储你的信息。这段内存的位置在每次运行程序的时候不同。 你在序列化你的string的时候,他会把string内部记录内存地址变量也序列化。两次运行,如果分配到的动态内存地址不同, 你的ok类在调用destructor的时候就会试图destruct string name, 然而name里面的地址是错误的,所以就会在释放内存的时候出错。
F. c++读取二进制文件出错
原因很简单,包含string类的struct不能直接把struct里面的内容存到文件,直接存的话只会存了string这个类的基本信息,string自己动态分配的东西你存不下来,所以会丢失string里面的内容
G. 为什么Excel无法打开二进制数据
原因:当前保存的格式为早期Excel版本的格式,所以会弹出该提示。
在微软发布office 2007以后,office文件的存储方式由二进制文件转变成了xml格式文件。所以在office 2007以前的版本即office 2003,office 2000,office xp,office 97这些软件版本的存储文档统称为早期版本。
由于文件格式由二进制文件转化为xml文件格式,xml格式比二进制文件的存储信息量大,而且压缩都更高,而且有很多特性是二进制文件所不具备的,所以office 2007及以上版本的excel打开早期版本的二进制文件时会对工作簿进行兼容性检查,因为二进制文件有很多的东西不能保存上,必须存储成xml格式的文件,否则就造成功能格式数据丢失的情形。
(7)为什么二进制文件不能读取扩展阅读:
解决方案就是把这个文件另存为“.xlsx”格式即可,另存步骤如下:
所需材料:Excel 2007演示。
一、首先点击Excel 2007窗口左上角的“Office按钮”(其它版本点击“文件”菜单)。