我正在使用的程序當前使用StreamWriter
在目標文件夾中創建一個或多個文本文件。關閉StreamWriter
類,我正在使用WriteLine
及其IDisposable
接口通過Using
指令(隱含.Close
)。向現有的StreamWriter代碼添加壓縮功能
我需要添加一個選項來創建一個或多個文本文件在目標文件夾內的zip存檔文件中。我打算將現有代碼更改爲使用流,因此可以使用ZIP文件作爲輸出(計劃使用DotNetZip)。
我想創建一些GetOutputStream
函數並將其饋入到當前存在的方法中。該功能將確定是否設置了存檔選項,並創建純文件或將其歸檔。問題是MemoryStream
看起來好像是一個很好的緩衝區類,與DotNetZip
一起使用,與繼承層次結構中的StreamWriter
不相交。
看起來像我唯一的選擇是創建一些IWriteLine
接口,它將執行WriteLine
和IDisposable
。然後分別從StreamWriter
和MemoryStream
分支兩個新的子類,並在其中實施IWriteLine
。
有沒有更好的解決方案?
當前的代碼概念性地看起來像這樣:
Using sw As StreamWriter = File.CreateText(fullPath)
sw.WriteLine(header)
sw.WriteLine(signature)
While dr.Read 'dr=DataReader
Dim record As String = GetDataRecord(dr)
sw.WriteLine(record)
End While
End Using
對於代碼樣本,無論是VB.NET或C#優良,儘管這更是一個概念上的問題。
編輯:不能使用.NET 4.5的System.IO.Compression.ZipArchive
,必須堅持.NET 4.0。我們仍然需要支持在Windows 2003上運行的客戶端。
我不是在追問爲什麼'StreamWriter'和'MemoryStream'需要一個共同的祖先。 –
@KeithPayne:能夠通過共同的祖先類型返回。與使用textboxbase類處理常規和帶有掩碼的文本框類似。 – Neolisk
在你想要完成的事情中,是否有理由?我只問,因爲這兩種類型,'StreamWriter'和'MemoryStream',沒有什麼共同之處。它們之間相互關聯的唯一原因是'StreamWriter'可以將字節寫入'MemoryStream'(或者'FileStream')。 –