You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助调试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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:17:05