不止一次地使用不可访问的流

iLe*_*ing 2 c# stream

using (var stream = GetS3ObjectStream(fooObj))
{
    WriteStreamToFtp(stream, "ftp://firstserver");
    WriteStreamToFtp(stream, "ftp://SecondServer"); 
}
Run Code Online (Sandbox Code Playgroud)

第一个可以工作,但第二个将只创建一个空文件

GetS3ObjectStream获取Amazon Simple存储对象的流.它是不可访问的流,您无法更改其中的光标位置.

现在,我要么不得不以某种方式限制多次使用流对象,或者我必须将光标移动到开头.

有任何想法吗?

upd:是的,你当然可以简单地将流保存在temp中.变量,但如果你不想这样做,那么呢?是否可以制作采用流的方法,并留下这些副作用?如果我关闭并在方法中处理源流怎么办?

usr*_*usr 7

您可以重新创建流或将其缓冲到使用之前byte[]MemoryStream之前.

编辑:我忘了提一个不缓冲的解决方案:

  1. 打开两个目标流
  2. 打开源流
  3. 在消耗源之前,读取N个字节的缓冲区并将缓冲区写入两个目标流(您甚至可以使用Parallel.Invoke()并行写入)