All Здравствуйте, скажите может кто в курсе, если нет то конечно новость будет. В Framework 4.0 важные системные компоненты работают не корректно, а именно:
System.IO.Compression.GZipStream и System.IO.Compression.DeflateStream!
Чтобы разобраться я набросал тестовый код и выложил свой файл который они не умеют сжимать:
Лист учета рабочего времени.doc А вот код:
[more=TestZip]
Код: [no]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Compression;
namespace TestZip
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string fn = textBox1.Text;
if (!File.Exists(fn)) return;
byte[] Body = null;
long l1 = 0;
using (FileStream fs = new FileStream(fn, FileMode.Open))
using (MemoryStream ms = new MemoryStream())
using (GZipStream ds = new GZipStream(ms, CompressionMode.Compress))
{
l1 = fs.Length;
fs.CopyTo(ds);
Body = new byte[ms.Length];
ms.Position = 0;
ms.Read(Body, 0, (int)ms.Length);
}
long l2 = 0;
using (MemoryStream ms1 = new MemoryStream())
{
ms1.Write(Body, 0, Body.Length);
ms1.Position = 0;
using (GZipStream ds = new GZipStream(ms1, CompressionMode.Decompress))
using (MemoryStream ms2 = new MemoryStream())
{
ds.CopyTo(ms2);
l2 = ms2.Length;
}
}
if (l1 != l2)
MessageBox.Show("GZip архивирует неправильно!\r\n"+
"Файл размером " + l1.ToString() + " байт,\r\n"+
"после разархивирования стал размером " + l2.ToString() + " байт.");
else
MessageBox.Show("А это GZip архивирует правильно...");
}
private void button2_Click(object sender, EventArgs e)
{
string fn = textBox1.Text;
if (!File.Exists(fn)) return;
byte[] Body = null;
long l1 = 0;
using (FileStream fs = new FileStream(fn, FileMode.Open))
using (MemoryStream ms = new MemoryStream())
using (DeflateStream ds = new DeflateStream(ms, CompressionMode.Compress))
{
l1 = fs.Length;
fs.CopyTo(ds);
Body = new byte[ms.Length];
ms.Position = 0;
ms.Read(Body, 0, (int)ms.Length);
}
long l2 = 0;
using (MemoryStream ms1 = new MemoryStream())
{
ms1.Write(Body, 0, Body.Length);
ms1.Position = 0;
using (DeflateStream ds = new DeflateStream(ms1, CompressionMode.Decompress))
using (MemoryStream ms2 = new MemoryStream())
{
ds.CopyTo(ms2);
l2 = ms2.Length;
}
}
if (l1 != l2)
MessageBox.Show("Deflate архивирует неправильно!\r\n" +
"Файл размером " + l1.ToString() + " байт,\r\n" +
"после разархивирования стал размером " + l2.ToString() + " байт.");
else
MessageBox.Show("А это Deflate архивирует правильно...");
}
private void button3_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() != DialogResult.OK) return;
textBox1.Text = openFileDialog1.FileName;
}
}
}
[/no]