我创建了一个简单的扩展来将Stream转换为Byte数组:
public static Byte[] ToByte(this Stream value)
{
if (value == null)
return null;
if (value is MemoryStream)
{
return ((MemoryStream)value).ToArray();
}
else
{
using (MemoryStream stream = new MemoryStream())
{
value.CopyTo(stream);
return stream.ToArray();
}
}
}
我第一次使用它时效果很好......
如果我在同一个流上第二次使用它,则生成的Byte []是Byte [0]。
我调试了,我认为这是因为在第一次转换后,Stream索引会转到流的末尾。
解决此问题的正确方法是什么?
答案 0 :(得分:8)
正如你所说,你在第一次阅读后就在流的最后。因此,您需要使用以下命令重置内存流:
stream.Seek(0, SeekOrigin.Begin);
或
stream.Position = 0;
再次阅读之前。请注意,对于任一方法,流上的CanSeek
必须为true。 MemoryStream
很好,其他一些流将此设置为false。
答案 1 :(得分:1)
将流索引设置为开头。
stream.Seek(0, SeekOrigin.Begin);