diff --git a/src/SharpCompress/Archives/Zip/ZipArchive.cs b/src/SharpCompress/Archives/Zip/ZipArchive.cs index f0889668c..d295c6e66 100644 --- a/src/SharpCompress/Archives/Zip/ZipArchive.cs +++ b/src/SharpCompress/Archives/Zip/ZipArchive.cs @@ -23,6 +23,8 @@ public class ZipArchive : AbstractWritableArchive /// public CompressionLevel DeflateCompressionLevel { get; set; } + public string ArchiveComment { get; private set; } + #if !NO_FILE /// @@ -154,6 +156,8 @@ protected override IEnumerable LoadEntries(IEnumerable ReadSeekableHeader(Stream stream) yield break; } + if (entry.Comment.Length != 0) + { + directoryEntryHeader.Comment = ByteArrayToString(entry.Comment); + } + //entry could be zero bytes so we need to know that. directoryEntryHeader.HasData = directoryEntryHeader.CompressedSize != 0; yield return directoryEntryHeader; } } + internal string ByteArrayToString(byte[] ba) + { + StringBuilder hex = new StringBuilder(ba.Length * 2); + foreach (byte b in ba) + hex.AppendFormat("{0:x2}", b); + return hex.ToString(); + } + private static void SeekBackToHeader(Stream stream, BinaryReader reader, uint headerSignature) { long offset = 0; diff --git a/tests/SharpCompress.Test/Zip/ZipArchiveTests.cs b/tests/SharpCompress.Test/Zip/ZipArchiveTests.cs index 031698d84..4b22b8c5e 100644 --- a/tests/SharpCompress.Test/Zip/ZipArchiveTests.cs +++ b/tests/SharpCompress.Test/Zip/ZipArchiveTests.cs @@ -11,7 +11,11 @@ namespace SharpCompress.Test.Zip { - public class ZipArchiveTests : ArchiveTests + using Microsoft.VisualStudio.TestPlatform.ObjectModel; + + using SharpCompress.Writers.Zip; + + public class ZipArchiveTests : ArchiveTests { public ZipArchiveTests() { @@ -461,5 +465,22 @@ public void TestSharpCompressWithEmptyStream() } } } + + [Fact] + public void ReadArchiveComment() + { + string expectedComment = "HelloWorld"; + using (var streamArchive = ZipArchive.Create()) + { + var zipStream = new MemoryStream(); + streamArchive.AddEntry("Dummy", new MemoryStream()); + streamArchive.SaveTo(zipStream, new ZipWriterOptions(CompressionType.Deflate) { ArchiveComment = expectedComment }); + using (var openedArchive = ZipArchive.Open(zipStream)) + { + var entries = openedArchive.Entries.ToList(); + Assert.Equal(expectedComment, openedArchive.ArchiveComment); + } + } + } } }