編輯:我需要將文本文件的內容轉換爲字符串數組,將它們寫入另一個 - untyped - 文件,並將創建的文件壓縮爲gzip。使用Streamreader將文件內容轉換爲字符串數組,然後壓縮
下面我提供了我能夠發現的答案,以及解壓縮過程,如果需要的話。
編輯:我需要將文本文件的內容轉換爲字符串數組,將它們寫入另一個 - untyped - 文件,並將創建的文件壓縮爲gzip。使用Streamreader將文件內容轉換爲字符串數組,然後壓縮
下面我提供了我能夠發現的答案,以及解壓縮過程,如果需要的話。
這是我結束了在這種情況下訴諸。
string jobDirVar = [FilePath];
byte[] bytesToCompress = File.ReadAllBytes(jobDirVar);
byte[] decompressedBytes = new byte[bytesToCompress.Length];
using (FileStream fileToCompress = File.Create(FilePath))
{
using (GZipStream compressionStream = new GZipStream(fileToCompress, CompressionMode.Compress))
{
compressionStream.Write(bytesToCompress, 0, bytesToCompress.Length);
}
}
using (FileStream fileToDecompress = File.Open(FilePath, FileMode.Open))
{
using (GZipStream decompressionStream = new GZipStream(fileToDecompress, CompressionMode.Decompress))
{
decompressionStream.Read(decompressedBytes, 0, bytesToCompress.Length);
}
}
這不是最漂亮的編碼,但它似乎提供了我以後的東西。如果其他任何人有什麼可以簡化的東西,我仍然很想聽到它!
.NET Framework在基本庫中提供System.IO.Compression.DeflateStream
類;它實現了DEFLATE壓縮算法。 zlib流只是zlib魔術字節,隨後是使用DEFLATE算法壓縮的內容。
oops,我給出了「zlib」流的指令,它比gzip更原始。除了deflate壓縮的內容之外,gzip還有一個目錄和其他內容。
對於gzip,請使用框架的System.IO.Compression.GZipStream
類,正如Mike_G的答案所示。
有什麼機會可以擴展一下嗎?這似乎與我正在尋找的線條一致,但對於像我一樣綠色的人來說,這有點神祕。抱歉。 : -/ – Eiketsu 2014-09-30 13:40:03
這是我用gzip的-ING的對象:
byte[] initialBytes = //object serialized to bytes
byte[] compressedBytes;
using (MemoryStream stream = new MemoryStream(initialBytes))
{
using (MemoryStream output = new MemoryStream())
{
using (GZipStream zipper = new GZipStream(output, CompressionMode.Compress))
{
Pump(stream, zipper);
}
compressedBytes = output.ToArray();
}
}
return compressedBytes;
//pump method
internal static void Pump(Stream input, Stream output)
{
byte[] bytes = new byte[4096];
int n;
while ((n = input.Read(bytes, 0, bytes.Length)) != 0)
{
output.Write(bytes, 0, n);
}
}
,如果我需要做一個文件:
byte[] result;
using(FileStream file = //some filestream I created)
{
file.Position = 0;
using (MemoryStream output = new MemoryStream())
{
using (GZipStream zipper = new GZipStream(output, CompressionMode.Compress))
{
Pump(file, zipper);
}
result = output.ToArray();
}
}
return result;
我會試一試,看看我可以用它來管理。謝謝。 :) – Eiketsu 2014-09-30 13:40:20
我也爲文件流添加一個方法 – 2014-09-30 13:41:54
爲簡潔起見,重寫了原始問題。 – Eiketsu 2014-10-16 13:24:10