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