如何通过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
相关产品推荐
相关产品推荐

