adamhathcock / sharpcompress

SharpCompress is a fully managed C# library to deal with many compression types and formats.
MIT License
2.25k stars 479 forks source link

Get NullReferenceException after saving last entry of a 7zip archive #17

Closed donRumatta closed 10 years ago

donRumatta commented 10 years ago

I'm using the example:

var archive = ArchiveFactory.Open(item.FullName); foreach (var entry in archive.Entries) { if (!entry.IsDirectory) { entry.WriteToDirectory(@"C:\Research\SharpCompress\SharpCompress\Archives"); } }

Decompressing is done successfully only if file has some content. If it is empty I get NullReferenceException in ListeningStream.Read (Stream is null). As I understand archiveEntry.OpenEntryStream() returns null.

Archive can be downloaded from the same issue posted on CodePlex.

And it is important, that such issue appears only with 7zip, rar and zip are processed without errors.

UPD. the main reason is that file.HasStream = !emptyStreamVector[i]; is false for my archive. How can it be changed to true?

donRumatta commented 10 years ago

Temporally, I've added such a check to skip entry:

entry is SevenZipArchiveEntry && entry.Size == 0

But it would be great if decompressing of empty files is performed silently like in rar and zip cases.

adamhathcock commented 10 years ago

I added a null check for streams from OpenEntryStream: https://github.com/adamhathcock/sharpcompress/commit/d1a64021e188e04769517ee7276a3e0690235b2d

donRumatta commented 10 years ago

Thank you.