2013-07-08 3 views
0

Я пытаюсь разархивировать zip-файл, содержащий один txt-файл. Но я должен обрабатывать потоки неправильно или что-то, потому что вывод представляет собой пустую строку.Поток пуст от ZipFile

content = new StreamReader(ms).ReadToEnd(); // content is "" 

Я использую пакет с открытым исходным кодом DotNetZip. Любая идея, что здесь отсутствует?

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": 
     MemoryStream ms = new MemoryStream(); 

     using (ZipFile zip = ZipFile.Read(a.RawBytes)) 
     { 
     foreach (ZipEntry e in zip) 
      e.Extract(ms); 
     } 

     content = new StreamReader(ms).ReadToEnd(); // content is "" 
     break; 
    default: 
     content = new StreamReader(new MemoryStream(a.RawBytes)).ReadToEnd(); 
    break; 
+3

Добавить ms.Postion = 0; непосредственно перед вами ReadToEnd(). Thep osition находится в последнем байте сразу после того, как вы вызвали e.Extract. Установив позицию обратно в 0, вы можете прочитать все байты с начала потока. – rene

+0

Спасибо. Это сработало. –

ответ

3

У меня были подобные проблемы в прошлом, решается путем установки свойства

Position = 0; 

перед использованием содержимого потока.

+0

Спасибо. Это было именно так. –

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