【发布时间】:2015-05-31 03:42:24
【问题描述】:
我将二进制文件加载到内存流中并修改字节,然后将文件存储到磁盘。但是为了节省时间,我保留修改后的字节数组来计算校验和。当我从磁盘加载保存的文件并计算校验和时,文件长度与保存时的原始字节长度大约有 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);
}
任何建议将不胜感激。
谢谢
【问题讨论】:
-
Stream.Read只需要读取到您传入第三个参数的值。您必须根据需要读取调用和循环的结果。 -
感谢您的建议,但写入已完成,没有任何其他字节可读取。所以 writestream.Length 是写入的总字节数。文件的保存也是storedFile字节数组,例如,它是379528字节,但是当我读取保存为379528字节的文件时,它有379698。保存的文件有更多字节没有意义比我保存的那样。
-
请提供可靠地重现问题的a good, minimal, complete code example。这里根本没有足够的信息来为您提供答案。哎呀,您甚至没有显示代码您在哪里编写文件,这对我来说似乎是一个重要的细节。
-
我已经添加了保存文件的代码。