C# 如何使用一个StreamWriter写入多个底层流?
我正在向C# 如何使用一个StreamWriter写入多个底层流?,c#,azure,stream,compression,gzipstream,C#,Azure,Stream,Compression,Gzipstream,我正在向System.IO.StreamWriter写入文本 底层流(在新StreamWriter(underlyngStream)中指定)写入远程文件。(我不认为它的类型是相关的,但为了完整起见,我要提到它是microsoft azureCloudBlobStream underlyingStream) 现在,我想通过编写一个具有相同内容的额外压缩文件来扩展它,但是在StreamWriter和第二个CloudBlobStream之间使用GZipOutputStream compressedUn
System.IO.StreamWriter
写入文本
底层流(在新StreamWriter(underlyngStream)中指定)写入远程文件。(我不认为它的类型是相关的,但为了完整起见,我要提到它是microsoft azureCloudBlobStream underlyingStream
)
现在,我想通过编写一个具有相同内容的额外压缩文件来扩展它,但是在StreamWriter
和第二个CloudBlobStream
之间使用GZipOutputStream compressedUnderlyingStream
我正在寻找一种方法,将CloudBlobStream
s都指定为StreamWriter
的底层流。但我找不到办法。是否存在可以组合两个底层流的流类型?或者我该如何处理这个问题?注意,我希望所有内容都保持为流,以最小化内存中的数据量
//disregard lack of using statements for this example's sake
CloudBlobStream blobStream = blob.OpenWrite();
CloudBlobStream compressedBlobStream = compressedBlob.OpenWrite();
GZipOutputStream compressorStream = new GZipOutputStream(compressedBlobStream);
//I make the streamwriter here for the regular blob,
///but how could I make the same streamwriter also write to the compressedBlob at the same time?
TextWriter streamWriter = new StreamWriter(blobStream, Encoding.UTF8);
我一时想不出一个,但写下你自己的是微不足道的:
class MultiStream : Stream
{
private List<Stream> streams;
public Streams(IEnumerable<Stream> streams)
{
this.streams = new List<Stream>(streams);
}
...
public override void Write(byte[] buffer, int offset, int count)
{
foreach(Stream stream in streams)
stream.Write(buffer, offset, count);
}
...
}
类多流:流
{
私有列表流;
公共流(IEnumerable Streams)
{
this.streams=新列表(流);
}
...
公共重写无效写入(字节[]缓冲区、整数偏移量、整数计数)
{
foreach(流中的流)
写入(缓冲区、偏移量、计数);
}
...
}
没有这样的标准流
实现,您需要自己制作。谢谢——不过,如果您想知道如何处理其他属性,例如长度
和位置
,我想它们可能会根据底层流的类型而有所不同?@DavidS。可能显示所有长度的最小值,并且根据每个起始位置有一个相对位置是的,可能。。作为一个私有实现,我想我可以在这两个属性上抛出异常,只要它们不被其他流或用户使用me@DavidS. 我不想对这些属性抛出异常,因为StreamWriter/Reader可以调用它们。我只返回“安全”值,比如所有流的最小长度。这将保证该位置永远不会超过流的末端。然而,跟踪职位将更加棘手。以防有人需要实施: