求助调试System.IO.EndOfStreamException文件流读取异常
解决System.IO.EndOfStreamException异常问题
异常触发的核心原因是目标文件大小不足4字节:ReadInt32()方法需要一次性读取4字节的整数数据,当文件总长度小于4字节时,无法完成读取操作,直接抛出"无法读取超出流的末尾"异常。此外,即使文件够4字节,后续读取第二个Int32时,若文件总长度不足8字节,也会触发同样异常。
解决方案
- 前置文件长度校验
在执行读取操作前,先判断文件流的总长度是否至少为8字节(需要读取两个Int32,每个占4字节),长度不足直接返回false,避免触发异常。 - 修正长度校验逻辑
原代码中dataLength == binaryReader.BaseStream.Length的逻辑错误:读取两个Int32后,流的位置已偏移8字节,此时BaseStream.Length是文件总长度,而dataLength应该对应数据部分的长度,正确校验应为dataLength == 文件总长度 - 已读取的8字节。
修正后的代码
private static bool ValidateFormat(string dumpFile, int magicNumberToSearch) { using (var fileStream = new FileStream(dumpFile, FileMode.Open, FileAccess.Read)) { // 先检查文件是否能容纳两个Int32(共8字节) if (fileStream.Length < 8) { return false; } using (var binaryReader = new BinaryReader(fileStream)) { var magicNumber = binaryReader.ReadInt32(); var dataLength = binaryReader.ReadInt32(); return magicNumber == magicNumberToSearch && dataLength == fileStream.Length - 8; } } }
额外注意事项
- 若场景中文件可能存在权限问题,建议添加
try-catch块捕获IOException等异常,提升代码健壮性。 - 确认传入的文件路径正确,避免因路径错误导致的隐性问题。
内容的提问来源于stack exchange,提问作者Prasanna Prashi
相关产品推荐
相关产品推荐

