Reputation: 135
I have a zip stored in azure blob storage which I'm streaming it locally and iterating its entries.
I'm getting the stream like that:
BlobClient blob = _blobServiceClientProp.GetBlobContainerClient(blobExtractionSource.ContainerName)
.GetBlobClient(blobExtractionSource.BlobName);
Stream zipStream = await blob.OpenReadAsync().ConfigureAwait(false);
The stream length is valid (8890655642 bytes).
Using DotNetZip 1.16, I'm reading from the zip stream:
ZipFile zipFile = ZipFile.Read(zipStream);
The problem is that I'm getting wrong number of entries. According to DotNetZip, I have 41082 entries in the zip which is wrong. I checked the number of entries both by the Entries property (zipFile.Entries) and also by iterating and count them manually.
If I switch to IO.Compression.ZipArchive
and iterating the zip entries, IO.Compression.ZipArchive
is telling me I have 85,413 entries in the zip, which is the right number of entries.
Any suggestions how can I still work with DotNetZip and make it get the right number of entries?
Note that when reading from the same zip locally (after I manually download it) with same version of DotNetZip, I successfully get all the entries.
Upvotes: 2
Views: 228
Reputation: 8234
Through ZipArchive we could able to pull off the exact number. Below is the code that worked for us.
var stream = await blobClient.OpenReadAsync();
using ZipArchive zip = new ZipArchive(stream, ZipArchiveMode.Read);
Console.WriteLine(zip.Entries.Count);
Edit
The Code that worked for us using DotNetZip
BlobClient blob = blobServiceClient.GetBlobContainerClient("container-1")
.GetBlobClient("samplezip1.zip");
Stream zipStream = await blob.OpenReadAsync().ConfigureAwait(false);
ZipFile zipFile = ZipFile.Read(zipStream);
Console.WriteLine(zipFile.Entries.Count);
Upvotes: 0