我想遍历压缩存档的内容,并且在内容可读的地方显示它们。我可以为基于文本的文件执行此操作,但似乎无法解决如何从图像等事物中提取二进制数据。这就是我所拥有的:
var zipArchive = new System.IO.Compression.ZipArchive(stream);
foreach (var entry in zipArchive.Entries)
{
using (var entryStream = entry.Open())
{
if (IsFileBinary(entry.Name))
{
using (BinaryReader br = new BinaryReader(entryStream))
{
//var fileSize = await reader.LoadAsync((uint)entryStream.Length);
var fileSize = br.BaseStream.Length;
byte[] read = br.ReadBytes((int)fileSize);
binaryContent = read;
我可以在zip文件中看到,但调用Length
会导致OperationNotSupported
错误。另外,考虑到我需要很长时间然后必须转换为整数,我觉得我错过了一些关于它应该如何工作的基本信息。
答案 0 :(得分:0)
我认为流将在读取时解压缩数据,这意味着流不能知道解压缩的长度。调用entry.Length应返回可以使用的正确大小值。您也可以调用entry.CompressedLength来获取压缩大小。
答案 1 :(得分:0)
只需将流复制到文件或其他流中:
using (var fs = await file.OpenStreamForWriteAsync())
{
using (var src = entry.Open())
{
var buffLen = 1024;
var buff = new byte[buffLen];
int read;
while ((read = await src.ReadAsync(buff, 0, buffLen)) > 0)
{
await fs.WriteAsync(buff, 0, read);
await fs.FlushAsync();
}
}
}