我在一个zip文件中有一个zip文件,我需要将内部zip文件存储在byte []类型的对象的属性中。因此,我需要读取内部zipfile并将其转换为byte []。
在下面的代码中,我打开了主要的zip文件,并将ZipArvhiveEntry条目存储为(内部)zip文件,并将其存储在名为apps的列表列表中。
问题是因为我需要在memStream之前调用memStream.ToArray()来获取字节,因此newArchive被关闭,看来我没有得到zip文件字节的最后一部分(好像ZipArchive实际上是在memStream关闭时向其写入内容,但是我无法在不关闭memStream的情况下手动将其关闭。)
如何解决该问题,以便在我的byteArray(名为appBytes)中获得完整的ZipArchive?
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();
}
}
}