c# .net 使用stream 的copyto 方法无效?

MemoryStreamms=newMemoryStream();varimg=GetImage.GetWindowCapture(hwnd,carPoint,addre... MemoryStream ms = new MemoryStream();
var img = GetImage.GetWindowCapture(hwnd, carPoint, addressPoint);
img.Save(ms, ImageFormat.Tiff);
using (FileStream fs = new FileStream(carFold + "car0.tif", FileMode.Create, FileAccess.Write))
{
ms.CopyTo(fs);
fs.Flush();
}
ms.Dispose();

这里使用copyto 保存的文件0k,但是如果将ms转换为字节数组,然后写入fs 保存文件就正常,求教哪里出了问题?
展开
 我来答
如是我之闻
推荐于2018-03-11 · TA获得超过1237个赞
知道小有建树答主
回答量:1207
采纳率:57%
帮助的人:826万
展开全部

首先:Stream.CopyTo要dotNet4.0以上才有。

当对文件操作,写入和复制时,你需要创建一个byte[]类型的buffer(因为涉及和磁盘交互)。你转换为数组就是相当于一个buffer. MemoryStream 实质上一个无法改变大小的字节数组的实例,这样造就了不能做为缓冲区使用,因而无法直接写入文件。【查看MSDN】

你可以重写CopyTo方法,达到你想要的结果。

实例代码如下:

public void CopyTo(Stream destination)
{
    // 缓冲区默认大小
    this.InternalCopyTo(destination, 81920);
}

private void InternalCopyTo(Stream destination, int bufferSize)
{
    byte[] array = new byte[bufferSize];
    int count;
    while ((count = this.Read(array, 0, array.Length)) != 0)
    {
        destination.Write(array, 0, count);
    }
}
更多追问追答
追问
可能是您说的原理吧,请问哪些流 可做为缓冲区使用,哪些流不可以呢?
追答
能作为缓冲区使用的就是btye[]了。流是分配好大小的byte[]
red0alert
2020-05-25 · TA获得超过1323个赞
知道小有建树答主
回答量:815
采纳率:64%
帮助的人:97.6万
展开全部
Stream.CopyTo是复制“流的当前位置到流结尾的字节”到目标流,且不会重设当前位置。
注意什么叫“当前位置”。流被使用后“当前位置”就会发生改变。
如果你需要把某个流的所有字节都复制,你需要先重设流的当前位置为起始位置然后再CopyTo。
“且不会重设当前位置”的意思是:当你完成调用某个流的CopyTo之后,流的当前位置就是流的结尾,不会自动重设到起始位置或某处。若你想再次复制该流的所有字节到另一个流,你就需要再次重设流的当前位置到起始位置。
用“Stream.Position = 0;”重设当前位置到起始位置。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sxhgga
2014-07-15 · TA获得超过687个赞
知道小有建树答主
回答量:1019
采纳率:74%
帮助的人:642万
展开全部
ms.CopyTo(fs); //参数你看看 试试其他重载方法(长度 起始位置)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
染青42
2018-07-01 · TA获得超过1058个赞
知道小有建树答主
回答量:856
采纳率:50%
帮助的人:150万
展开全部
FileStream.CopyTo(MemoryStream) ok
MemoryStream.CopyTo(FileStream) false

看了官方的例子,结论如上

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式