Dekel tsairi
Dekel tsairi

Reputation: 135

DotNetZip doesn't read all entries from zip stored at azure blob storage

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

Answers (1)

SwethaKandikonda
SwethaKandikonda

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

Related Questions