public object DeCompress(string fileName)
{
object obj = null;
try
{
using (Stream source = File.OpenRead(fileName))
{
using (Stream destination = new MemoryStream())
{
using (GZipStream input = new GZipStream(source, CompressionMode.Decompress, true))
{
byte[] bytes = new byte[4096];
int n;
while ((n = input.Read(bytes, 0, bytes.Length)) != 0)
{
destination.Write(bytes, 0, n);
}
}
destination.Flush();
destination.Position = 0;
BinaryFormatter b = new BinaryFormatter();
obj = (object)b.Deserialize(destination);
}
}
}
catch
{ }
return obj;
}
private void CreateCompressFile(object obj, string fileName)
{
try
{
BinaryFormatter formatter = new BinaryFormatter();
using (Stream source = new MemoryStream())
{
formatter.Serialize(source, obj);
source.Position = 0;
using (Stream destination = new FileStream(fileName, FileMode.Append, FileAccess.Write))
{
using (GZipStream output = new GZipStream(destination, CompressionMode.Compress))
{
byte[] bytes = new byte[4096];
int n;
while ((n = source.Read(bytes, 0, bytes.Length)) != 0)
{
output.Write(bytes, 0, n);
}
}
}
}
}
catch
{ }
}
测试:
public void test()
{
string fileName = AppDomain.CurrentDomain.BaseDirectory.Trim() + "test.dat";
Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("a", 1);
dic.Add("b", 2);
dic.Add("c", 3);
dic.Add("d", 4);
dic.Add("e", 5);
dic.Add("f", 6);
CreateCompressFile(dic, fileName);
dic = (Dictionary<string, int>)DeCompress(fileName);
Console.WriteLine(dic.Count);
}