编辑:我需要将文本文件的内容转换为字符串数组,将它们写入另一个 - 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