问题描述
- C#读取特定格式的二进制文件
-
在学习的时候遇到了一点麻烦,读取一个二进制文件,这个二进制文件包含了很多相同结构的数据块,每个数据块以FFFF开头,以FFEE结尾,每个数据块长度为1024bytes。但是其中偶尔会出现错误数据,也就是数据块不完整,只有FFFF开头,没有FFEE结尾,这种数据块就不能用。
如果读取数据,就必须去验证。请问各位如何验证?
我本来想用BinaryReader读取,然后验证,但是BinaryReader读了数据就往前移动,就算验证成功了也得不到数据。请各位大神帮个忙,指点下,最好说详细点儿,初学者。十分感谢!!!
此外如何验证读完整个文件了?BinaryReader没有EndOfStream。只能用try...catch...吗?
PS:文件一开头不是FFFF开头,有一节无用的数据。十分感谢~
解决方案
C#读取二进制文件的机制(转)
C++与c#读取二进制文件对比
C#读取二进制文件
解决方案二:
验证头尾和长度就好了啊
解决方案三:
每个数据块以FFFF开头,以FFEE结尾,每个数据块长度为1024bytes
那就先查找FFFF,找到后开始读取1024bytes到byte[] buff = new byte[1024];中,
读取的过程中还需要判断是不是FFFF,是的话就把buff中的数据空重新开始读取,
并且判断是不是FFEE,如果是就判断读取到buff的长度够不够1024,不够就丢弃,重新找FFFF;
如果不是就继续读取,同时要判断buff是否已经写满,写满后还不是FFEE就丢弃,重新找FFFF;
解决方案四:
因为BinaryReader()读取的位置不能前移,那么当我验证了FFFF后40位字节不是0000时,BinaryReader()也不能返回到FFFF后面的那个字节了。
我目前使用的方法是读取42个bytes,然后验证,如果不是FFFF开头0000结尾,那么整个数组就往后移动一个字节。不知道这个方法笨不笨。
PS:这里用0000替代FFEE,0000才是结尾,之前记错了。
时间: 2024-08-01 13:15:34