У меня есть zip-файлы в zip-файле, и мне нужно хранить внутренние zip-файлы в свойстве объекта типа byte [].Поэтому мне нужно прочитать внутренние zip-файлы и преобразовать их в byte [].
В приведенном ниже коде я открыл основные zip-файлы и сохранил записи ZipArvhiveEntry, которые являются (внутренними) zip-файлами, в списке List с именемapps.
Проблема в том, что мне нужно вызвать memStream.ToArray (), чтобы получить байты до memStream, и, следовательно, newArchive закрыт, кажется, что я не получаю последнюю часть байтов zip-файла (этокажется, что ZipArchive действительно записывает что-то в memStream, когда он закрывается, но у меня нет возможности вручную закрыть его, не закрывая memStream).
Как я могу решить эту проблему, чтобы я получил полный ZipArchive вмой byteArray (с именем appBytes)?
foreach (ZipArchiveEntry app in apps) {
byte[] appBytes;
using (MemoryStream memStream = new MemoryStream()){
using (Stream innerAppStream = app.Open()) {
using (ZipArchive newArchive = new ZipArchive(memStream, ZipArchiveMode.Create)){
using (ZipArchive readArchive = new ZipArchive(innerAppStream, ZipArchiveMode.Read)){
foreach (var readEntry in readArchive.Entries){
ZipArchiveEntry newArchiveEntry = newArchive.CreateEntry(readEntry.Name);
using (Stream newArchiveEntryStream = newArchiveEntry.Open()){
using (StreamWriter writer = new StreamWriter(newArchiveEntryStream)){
using (Stream readEntryStream = readEntry.Open()){
using (var reader = new StreamReader(readEntryStream)){
string input = reader.ReadToEnd();
writer.WriteLine(input);
writer.Flush();
}
}
}
}
}
}
memStream.Flush();
memStream.Seek(0, SeekOrigin.Begin);
appBytes = memStream.ToArray();
}
}
}