2017-02-03 54 views
0

我正在寫文本到System.IO.StreamWriter如何使用一臺StreamWriter寫入多個基礎流?

基礎流(在new StreamWriter(underlyingStream)中指定)寫入遠程文件。 (我不認爲它的類型是相關的,但爲了完整起見,我會提到它是一個微軟azure CloudBlobStream 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); 
+0

有沒有這樣的標準'Stream'實現,你需要做你自己的。 –

回答

2

我不認爲一個人把我的頭頂部,但它是微不足道的編寫自己:

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); 
    } 

    ... 
} 
+0

謝謝 - 有關如何處理其他屬性的想法,例如'Length'和'Position',我想它們可以根據基礎流的類型而有所不同? –

+0

@DavidS。也許顯示所有長度的最小值,並根據每個起始位置有一個相對位置 –

+0

是啊也許..作爲一個私人實現,我想我可以拋棄拋出這兩個屬性的異常,只要它們不被其他流或由我 –

相關問題