在C#中使用BinaryReader读取上传文件时,遇到空数组的情况

9
假设以下代码:
Stream file = files[0].InputStream;

var FileLen = files[0].ContentLength;

var b = new BinaryReader(file);
var bytes = b.ReadBytes(FileLen);

如果我上传一个包含10条记录(257字节)的CSV文件,BinaryReader会用“0”填充字节数组。
我也编写了一个循环来遍历BinaryReader的ReadByte方法,在循环的第一次迭代中,我收到了以下异常:
无法读取流的结尾
当我将CSV文件增加到200个记录时,一切正常。
问题是,为什么会在较小的文件上发生这种情况,是否有一种解决方法可以允许读取较小的文件。

2
在调用 ReadBytes 之前尝试使用 b.BaseStream.Position = 0; - Adeel
@Adeel 我会期望文件上传从源头开始... - Marc Gravell
奇怪的是 - 如果你用 Fiddler 等工具检查,是否有有效载荷? - Marc Gravell
是的,有一个有效载荷,我能够将有效载荷加载到StreamReader中并提取第一行,我确信我可以通过这种方式提取所有信息。不过,我想将二进制数据存储在数据库中,而不是以字符串形式存储。 - Paul Shriner
@Adeel,你说得完全正确,在反复检查了一切之后,问题确实出在BaseStream.position上。 - Paul Shriner
1个回答

24

不确定为什么,但是当你在上传的流上使用BinaryReader时,起始位置需要明确设置。

b.BaseStream.Position = 0;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接