2013-07-08 3 views
0

Следующая строка создает проблемыРаспакуйте вложение почты

content = new StreamReader(new GZipStream(new MemoryStream(a.RawBytes), CompressionMode.Decompress)).ReadToEnd(); 

InvalidDataException произошло: Магическое число в заголовке GZip не правильно. Убедитесь, что вы находитесь в потоке GZip.

Могу я не преобразовать вложение в массив байтов или что я делаю неправильно?

Attachment a = (from x in mail.Attachments.OfType<Attachment>() 
    where !string.IsNullOrEmpty(x.Body) || x.RawBytes != null 
    select x).FirstOrDefault(); 

AttachmentName = a.Name; 
string AttachmentType = a.Name.Substring(a.Name.Length - 3, 3).ToUpper(); 

switch (AttachmentType) 
{ 
    case "ZIP": 
     content = new StreamReader(new GZipStream(new MemoryStream(a.RawBytes), CompressionMode.Decompress)).ReadToEnd(); 
     break; 
    default: 
     content = new StreamReader(new MemoryStream(a.RawBytes)).ReadToEnd(); 
     break; 
} 
+0

Заголовок Gzip содержит магическое число (подпись формата файла) и кажется, что это не файл Gzip, который вы пытаетесь распаковать ... –

+0

Добавляли ли вы лишний байт в массив байтов при сжатии? – Rezoan

ответ

4

Файл GZip - это не то же самое, что Zip-файл. Вы хотите System.IO.Compression.ZipFile или ZipArchive.

+0

Спасибо. Похоже, это решение. К сожалению, это оставляет мне еще одну проблему, поскольку программа находится в .NET 3.5 и System.IO.Compression.ZipFile - это только .NET 4.5. –

Смежные вопросы