我将二进制文件加载到内存流中并修改字节,然后将文件存储到磁盘。但是为了节省时间,我保留修改后的字节数组来计算校验和。当我从磁盘加载保存的文件并计算校验和时,文件长度与保存时的原始字节长度不同,大约为150字节,显然校验和与保存之前的校验和不匹配。关于为什么会这样的想法?我已经搜索并搜索了线索,但看起来我必须在保存后重新加载文件以计算准确的校验和。
另请注意,较短的字节数组确实正确呈现其内容,较长的字节数组也是如此,实际上两个数组的呈现方式相同!
这里是从内存流中收集修改后的字节的代码:
writerStream.Flush();
storedFile = new Byte[writerStream.Length];
writerStream.Position = 0;
writerStream.Read(storedFile, 0, Convert.ToInt32(writerStream.Length));
以下是我阅读文件的方式:
using (BinaryReader readFile = new BinaryReader(Delimon.Win32.IO.File.Open(filePath, Delimon.Win32.IO.FileMode.Open)))
{
byte[] cgmBytes = readFile.ReadBytes(Convert.ToInt32(readFile.BaseStream.Length));
hash = fileCheck.ComputeHash(cgmBytes);
}
以下是文件的保存方式:
(using BinaryWriter aWriter = new BinaryWriter(Delimon.Win32.IO.File.Create(filePath))
{
aWriter.Write(storedFile);
}
我们非常感谢任何建议。
THX
答案 0 :(得分:0)
通过简单地改变设置流位置的点,问题似乎已经解决了:
writerStream.Flush();
writerStream.Position = 0;
storedFile = new Byte[writerStream.Length];
writerStream.Read(storedFile, 0, Convert.ToInt32(writerStream.Length));
在前面的代码中,在读取流长度后设置了位置,现在在读取流长度之前设置了位置。在任何一种情况下,字节长度都不会改变,但是检索时保存的文件现在返回相同的字节长度。为什么?不确定,设置流位置不会影响流长度,也不会影响新实例化的编写器如何决定保存字节数组。小魔怪?...