Compression fails when using a memorystream instead of a filestream #542

Closed
opened 2026-01-29 22:13:29 +00:00 by claunia · 1 comment
Owner

Originally created by @DR9885 on GitHub (Nov 24, 2022).

Example Test (based on existing tests)

        [Fact]
        public void TestCompression3()
        {
            string archive = "file.tar";

            // create the 100 char filename
            string filename = "file2.txt";

            // Step 1: create a tar file containing a file with the test name
            using (var stream = new MemoryStream())
            using (var writer = WriterFactory.Open(stream, ArchiveType.Tar, CompressionType.None))
            using (var inputStream = new MemoryStream())
            {
                var input = "dummy filecontent";
                inputStream.Write(Encoding.UTF8.GetBytes(input));

                inputStream.Position = 0;
                writer.Write(filename, inputStream, null);


                // Step 2: check if the written tar file can be read correctly
                using (var archive2 = TarArchive.Open(stream))
                {
                    Assert.Equal(1, archive2.Entries.Count);
                    Assert.Contains(filename, archive2.Entries.Select(entry => entry.Key));

                    foreach (var entry in archive2.Entries)
                    {
                        Assert.Equal("dummy filecontent", new StreamReader(entry.OpenEntryStream()).ReadLine());
                    }
                }
            }

        }
Originally created by @DR9885 on GitHub (Nov 24, 2022). Example Test (based on existing tests) ``` [Fact] public void TestCompression3() { string archive = "file.tar"; // create the 100 char filename string filename = "file2.txt"; // Step 1: create a tar file containing a file with the test name using (var stream = new MemoryStream()) using (var writer = WriterFactory.Open(stream, ArchiveType.Tar, CompressionType.None)) using (var inputStream = new MemoryStream()) { var input = "dummy filecontent"; inputStream.Write(Encoding.UTF8.GetBytes(input)); inputStream.Position = 0; writer.Write(filename, inputStream, null); // Step 2: check if the written tar file can be read correctly using (var archive2 = TarArchive.Open(stream)) { Assert.Equal(1, archive2.Entries.Count); Assert.Contains(filename, archive2.Entries.Select(entry => entry.Key)); foreach (var entry in archive2.Entries) { Assert.Equal("dummy filecontent", new StreamReader(entry.OpenEntryStream()).ReadLine()); } } } } ```
Author
Owner

@DR9885 commented on GitHub (Nov 24, 2022):

Nvm, works when I set the position to zero



        [Fact]
        public void TestCompression3()
        {
            string archive = "file.tar";

            // create the 100 char filename
            string filename = "file2.txt";

            // Step 1: create a tar file containing a file with the test name
            using (var stream = new MemoryStream())
            using (var writer = WriterFactory.Open(stream, ArchiveType.Tar, CompressionType.None))
            using (var inputStream = new MemoryStream())
            {
                var input = "dummy filecontent";
                inputStream.Write(Encoding.UTF8.GetBytes(input));
                inputStream.Position = 0;
                writer.Write(filename, inputStream, null);
                stream.Position = 0;
                inputStream.Position = 0;


                // Step 2: check if the written tar file can be read correctly
                using (var archive2 = TarArchive.Open(stream))
                {
                    Assert.Equal(1, archive2.Entries.Count);
                    Assert.Contains(filename, archive2.Entries.Select(entry => entry.Key));

                    foreach (var entry in archive2.Entries)
                    {
                        Assert.Equal("dummy filecontent", new StreamReader(entry.OpenEntryStream()).ReadLine());
                    }
                }
            }

        }

@DR9885 commented on GitHub (Nov 24, 2022): Nvm, works when I set the position to zero ``` [Fact] public void TestCompression3() { string archive = "file.tar"; // create the 100 char filename string filename = "file2.txt"; // Step 1: create a tar file containing a file with the test name using (var stream = new MemoryStream()) using (var writer = WriterFactory.Open(stream, ArchiveType.Tar, CompressionType.None)) using (var inputStream = new MemoryStream()) { var input = "dummy filecontent"; inputStream.Write(Encoding.UTF8.GetBytes(input)); inputStream.Position = 0; writer.Write(filename, inputStream, null); stream.Position = 0; inputStream.Position = 0; // Step 2: check if the written tar file can be read correctly using (var archive2 = TarArchive.Open(stream)) { Assert.Equal(1, archive2.Entries.Count); Assert.Contains(filename, archive2.Entries.Select(entry => entry.Key)); foreach (var entry in archive2.Entries) { Assert.Equal("dummy filecontent", new StreamReader(entry.OpenEntryStream()).ReadLine()); } } } } ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/sharpcompress#542