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

如何通过FileInfo对象读取文件并转换为byte[]数组?

从FileInfo对象读取数据并转换为byte[]数组的解决方案

你当前代码中System.IO.File.ReadAllBytesAsync(file)报错的原因是,该方法接受的参数是文件路径字符串,而非FileInfo对象。可以通过以下两种方式直接基于FileInfo实现读取并转换为byte[]:

  • 方法一:利用FileInfo.FullName获取文件路径
    这是最简单的实现方式,直接通过FileInfo的FullName属性拿到文件完整路径,传入File.ReadAllBytesAsync即可:

    byte[] data = await System.IO.File.ReadAllBytesAsync(file.FullName);
    
  • 方法二:通过FileInfo.OpenRead()操作文件流
    如果需要更灵活的流控制,可以直接打开FileInfo对应的文件流,再读取流内容:

    using var stream = file.OpenRead();
    byte[] data = new byte[stream.Length];
    await stream.ReadAsync(data, 0, data.Length);
    

额外注意事项

你的代码中已经通过new ExcelPackage(file)打开了文件,此时文件会被锁定,后续再读取文件可能会触发占用冲突。建议调整逻辑顺序,先读取byte[]再初始化ExcelPackage(用内存流包装byte[]):

rootCommand.SetHandler(async (file) =>
{
    if (!file.Exists)
        throw new InvalidOperationException($"Invalid input file: {file.Name}");

    // 先读取文件到byte[]
    byte[] data = await System.IO.File.ReadAllBytesAsync(file.FullName);

    // 用内存流初始化ExcelPackage,避免文件锁定问题
    using var package = new ExcelPackage(new MemoryStream(data));
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
    ExcelWorksheets worksheets = package.Workbook.Worksheets;
    if (!worksheets.Any())
        throw new InvalidOperationException($"Invalid empty {file.Name}");

    // 后续业务逻辑
});

内容的提问来源于stack exchange,提问作者khteh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:07:10