MemoryStream如何转Stream

bsdekj2 2011-02-21 03:38:36
有一个方法需要输入Stream类型的参数或文件路径string类型。
getXXX(Stream stream) getXXX(string path)

而我手上有一个MemoryStream ms。
该如何把这个MemoryStream不用生成临时文件能让该方法读取
...全文
1547 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
will97 2011-02-21
  • 打赏
  • 举报
回复
stream的基本就是byte[];如果你真的弄不明白。建议你可以把memorystream转换成byte[]再把这个byte[]写入你所要的stream
bsdekj2 2011-02-21
  • 打赏
  • 举报
回复
发现原因了,存储方法之前有一句Close。但是close之后会无法获取Length,所以我的Length是Close之前获取的。
当Close之后长度也变化了。感谢各位回答,散分。
qldsrx 2011-02-21
  • 打赏
  • 举报
回复
看下_memorystrem是如何产生的,也许在那之前数据尚未填充,可以尝试调用_memorystrem.Flush()来立刻完成填充。
另外送你的Length可以推断,你的内存分配粒度是15459字节,好奇怪啊,难道不是Windows操作系统?
bsdekj2 2011-02-21
  • 打赏
  • 举报
回复
我单独试了一下_memorystrem.GetBuffer().Length为15459
FileStream Write完之后马上断点FileStream的Length为61836


异常是Dll自带的异常,“输入的XXX损坏”。
CGabriel 2011-02-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bsdekj2 的回复:]
流方面我不太了解,“ Position 拉回头部”是设置Position为0吗?我设置了一下还是不行。

我仔细的看了下MemoryStream的Length为15459
而存储的时候FileStream最终Length为61836

用Stream ms = File.OpenRead(path)读出来的最终Length为61836
请问怎么回事?
[/Quote]

抛出的异常是什么?
qldsrx 2011-02-21
  • 打赏
  • 举报
回复
奇怪,难道你的_memorystrem.GetBuffer().Length == 61836?
另外据我所知,GetBuffer()方法得到的长度是64K的整数倍。
bsdekj2 2011-02-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qldsrx 的回复:]

把你保存到文件的方法写出来就知道怎么回事了。
[/Quote]

FileStream fs = new FileStream(filePath + fileName, FileMode.Create);
fs.Write(_memorystrem.GetBuffer(), 0, _memorystrem.GetBuffer().Length);
qldsrx 2011-02-21
  • 打赏
  • 举报
回复
把你保存到文件的方法写出来就知道怎么回事了。
bsdekj2 2011-02-21
  • 打赏
  • 举报
回复
流方面我不太了解,“ Position 拉回头部”是设置Position为0吗?我设置了一下还是不行。

我仔细的看了下MemoryStream的Length为15459
而存储的时候FileStream最终Length为61836

用Stream ms = File.OpenRead(path)读出来的最终Length为61836
请问怎么回事?
CGabriel 2011-02-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bsdekj2 的回复:]
问题是直接传报错 
把MemoryStream保存成文件,然后再用该方法的getXXX(string path)就正常。
[/Quote]

证明你的 MemoryStream 有问题。。

有没有把 Position 拉回头部,然后再传进去?
bsdekj2 2011-02-21
  • 打赏
  • 举报
回复
还是不行,提示Stream损坏无法读取。

我的ms是这样存储的
FileStream fs = new FileStream(filePath + fileName, FileMode.Create);
fs.Write(_memorystrem.GetBuffer(), 0, _memorystrem.GetBuffer().Length);
酋长 2011-02-21
  • 打赏
  • 举报
回复
转换一下 GetXXX(ms as Stream)
bsdekj2 2011-02-21
  • 打赏
  • 举报
回复
问题是直接传报错 
把MemoryStream保存成文件,然后再用该方法的getXXX(string path)就正常。
bdmh 2011-02-21
  • 打赏
  • 举报
回复
MemoryStream 继承自Stream,直接传入MemoryStream 就行

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧