您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何将一个流的内容复制到另一个?

如何将一个流的内容复制到另一个?

input.CopyToAsync(output);

这将返回一个Task可以在完成时继续进行的操作,如下所示:

await input.CopyToAsync(output)

// Code from here on will be run in a continuation.

请注意,根据调用的位置,后面CopyToAsync代码可能会或可能不会在调用它的同一线程上继续。

SynchronizationContext调用时被抓获await将决定线程的延续将上执行。

此外,此调用(这是一个可能会更改的实现细节)仍会按顺序进行读写操作(它不会浪费线程阻塞I / O完成)。

input.CopyTo(output);

框架中没有任何东西可以帮助实现这一点。您必须手动复制内容,如下所示:

public static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[32768];
    int read;
    while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write (buffer, 0, read);
    }
}

注1:此方法将允许您报告进度(到目前为止已读取x字节…) 注2:为什么使用固定缓冲区大小而不是input.Length?因为该长度可能不可用!从文档

如果从Stream派生的类不支持查找,则对Length,SetLength,Position和Seek的调用将引发NotSupportedException。

其他 2022/1/1 18:15:21 有681人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶