Exemplo n.º 1
0
        static void Main()
        {
            Directory.CreateDirectory("_test");

            using (var stream = new FileStream(@"_test\test.7z", FileMode.Create, FileAccess.ReadWrite, FileShare.Delete))
            using (var encryption = new AESEncryptionProvider("test"))
            using (var encoder = new ArchiveWriter.Lzma2Encoder(null))
            {
                var writer = new ArchiveWriter(stream);
                writer.DefaultEncryptionProvider = encryption;
                writer.ConnectEncoder(encoder);
                string path = Path.GetDirectoryName(typeof(Program).Assembly.Location);
                var directory = new DirectoryInfo(path);
                foreach (string filename in Directory.EnumerateFiles(path))
                    writer.WriteFile(directory, new FileInfo(filename));
                writer.WriteFinalHeader();
            }

            {
                var pass = new Password("test");
                var db = new master._7zip.Legacy.CArchiveDatabaseEx();
                var x = new master._7zip.Legacy.ArchiveReader();
                x.Open(new FileStream(@"_test\test.7z", FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete));
                x.ReadDatabase(db, pass);
                db.Fill();
                x.Extract(db, null, pass);
            }
        }
 private void InitializeArchiveReader()
 {
     m_archive = new master._7zip.Legacy.CArchiveDatabaseEx();
     m_reader  = new master._7zip.Legacy.ArchiveReader();
     m_reader.Open(m_stream);
     m_reader.ReadDatabase(m_archive, null);
     m_archive.Fill();
 }
Exemplo n.º 3
0
 private void InitializeArchiveReader(string file)
 {
     m_file = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete);
     m_archive = new master._7zip.Legacy.CArchiveDatabaseEx();
     m_reader = new master._7zip.Legacy.ArchiveReader();
     m_reader.Open(m_file);
     m_reader.ReadDatabase(m_archive, null);
     m_archive.Fill();
 }
Exemplo n.º 4
0
 private void InitializeArchiveReader(string file)
 {
     m_file    = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete);
     m_archive = new master._7zip.Legacy.CArchiveDatabaseEx();
     m_reader  = new master._7zip.Legacy.ArchiveReader();
     m_reader.Open(m_file);
     m_reader.ReadDatabase(m_archive, null);
     m_archive.Fill();
 }
        public void Dispose()
        {
            if (m_archive != null)
            {
                m_archive = null;
            }

            if (m_reader != null)
            {
                try { m_reader.Close(); }
                finally { m_reader = null; }
            }

            if (m_writer != null)
            {
                try
                {
                    if (m_copyEncoder != null)
                    {
                        try
                        {
                            m_writer.ConnectEncoder(m_copyEncoder);
                            m_copyEncoder.Dispose();
                        }
                        finally { m_copyEncoder = null; }
                    }

                    if (m_lzma2Encoder != null)
                    {
                        try
                        {
                            m_writer.ConnectEncoder(m_lzma2Encoder);
                            m_lzma2Encoder.Dispose();
                        }
                        finally { m_lzma2Encoder = null; }
                    }

                    m_writer.WriteFinalHeader();
                }
                finally { m_writer = null; }
            }

            if (m_stream != null)
            {
                try { m_stream.Dispose(); }
                finally { m_stream = null; }
            }
        }
Exemplo n.º 6
0
        static void Main()
        {
            Directory.CreateDirectory("_test");

            bool writeArchive = true;
            bool useOldWriter = false;
            bool readArchive  = true;
            bool useOldReader = false;

            if (writeArchive)
            {
                if (useOldWriter)
                {
                    using (var stream = new FileStream(@"_test\test.7z", FileMode.Create, FileAccess.ReadWrite, FileShare.Delete))
                        using (var encryption = new AESEncryptionProvider("test"))
                            using (var encoder = new ArchiveWriter.Lzma2Encoder(null))
                            {
                                var writer = new ArchiveWriter(stream);
                                writer.DefaultEncryptionProvider = encryption;
                                writer.ConnectEncoder(encoder);
                                string path      = Path.GetDirectoryName(typeof(Program).Assembly.Location);
                                var    directory = new DirectoryInfo(path);
                                foreach (string filename in Directory.EnumerateFiles(path))
                                {
                                    writer.WriteFile(directory, new FileInfo(filename));
                                }
                                writer.WriteFinalHeader();
                            }
                }
                else
                {
                    Task.Run(async delegate {
                        using (var archiveStream = new FileStream(@"_test\test.7z", FileMode.Create, FileAccess.ReadWrite, FileShare.Delete))
                            using (var archiveWriter = ManagedLzma.SevenZip.Writer.ArchiveWriter.Create(archiveStream, false))
                            {
                                var encoder = new ManagedLzma.SevenZip.Writer.EncoderDefinition();
                                ManagedLzma.SevenZip.Writer.EncoderNodeDefinition node1 = null;
                                ManagedLzma.SevenZip.Writer.EncoderNodeDefinition node2 = null;
                                //node1 = encoder.CreateEncoder(ManagedLzma.SevenZip.Encoders.CopyEncoderSettings.Instance);
                                //node1 = encoder.CreateEncoder(new ManagedLzma.SevenZip.Encoders.LzmaEncoderSettings(new ManagedLzma.LZMA.EncoderSettings()));
                                //node1 = encoder.CreateEncoder(new ManagedLzma.SevenZip.Encoders.Lzma2EncoderSettings(new ManagedLzma.LZMA2.EncoderSettings()));
                                node2 = encoder.CreateEncoder(new ManagedLzma.SevenZip.Writer.AesEncoderSettings(ManagedLzma.PasswordStorage.Create("test")));
                                if (node1 != null && node2 != null)
                                {
                                    encoder.Connect(encoder.GetContentSource(), node1.GetInput(0));
                                    encoder.Connect(node1.GetOutput(0), node2.GetInput(0));
                                    encoder.Connect(node2.GetOutput(0), encoder.CreateStorageSink());
                                }
                                else
                                {
                                    encoder.Connect(encoder.GetContentSource(), (node1 ?? node2).GetInput(0));
                                    encoder.Connect((node1 ?? node2).GetOutput(0), encoder.CreateStorageSink());
                                }
                                encoder.Complete();

                                var metadata = new ManagedLzma.SevenZip.Writer.ArchiveMetadataRecorder();

                                var directory = new DirectoryInfo(Path.GetDirectoryName(typeof(Program).Assembly.Location));

                                bool useDistinctEncoders = false;

                                if (useDistinctEncoders)
                                {
                                    foreach (var file in directory.EnumerateFiles())
                                    {
                                        using (var session = archiveWriter.BeginEncoding(encoder, true))
                                        {
                                            using (var fileStream = file.OpenRead())
                                            {
                                                var result = await session.AppendStream(fileStream, true);
                                                metadata.AppendFile(file.Name, result.Length, result.Checksum, file.Attributes, file.CreationTimeUtc, file.LastWriteTimeUtc, file.LastAccessTimeUtc);
                                            }

                                            // TODO: ensure that everything still aborts properly if we don't call complete
                                            await session.Complete();
                                        }
                                    }
                                }
                                else
                                {
                                    using (var session = archiveWriter.BeginEncoding(encoder, true))
                                    {
                                        foreach (var file in directory.EnumerateFiles())
                                        {
                                            using (var fileStream = file.OpenRead())
                                            {
                                                var result = await session.AppendStream(fileStream, true);
                                                metadata.AppendFile(file.Name, result.Length, result.Checksum, file.Attributes, file.CreationTimeUtc, file.LastWriteTimeUtc, file.LastAccessTimeUtc);
                                            }
                                        }

                                        // TODO: ensure that everything still aborts properly if we don't call complete
                                        await session.Complete();
                                    }
                                }

                                await archiveWriter.WriteMetadata(metadata);
                                await archiveWriter.WriteHeader();
                            }
                    }).GetAwaiter().GetResult();
                }
            }

            if (readArchive)
            {
                if (useOldReader)
                {
                    var pass = new Password("test");
                    var db   = new master._7zip.Legacy.CArchiveDatabaseEx();
                    var x    = new master._7zip.Legacy.ArchiveReader();
                    x.Open(new FileStream(@"_test\test.7z", FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete));
                    x.ReadDatabase(db, pass);
                    db.Fill();
                    x.Extract(db, null, pass);
                }
                else
                {
                    var file     = new FileStream(@"_test\test.7z", FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete);
                    var mdReader = new ManagedLzma.SevenZip.FileModel.ArchiveFileModelMetadataReader();
                    var mdModel  = mdReader.ReadMetadata(file);
                    var password = ManagedLzma.PasswordStorage.Create("test");
                    for (int sectionIndex = 0; sectionIndex < mdModel.Metadata.DecoderSections.Length; sectionIndex++)
                    {
                        var dsReader = new ManagedLzma.SevenZip.Reader.DecodedSectionReader(file, mdModel.Metadata, sectionIndex, password);
                        var mdFiles  = mdModel.GetFilesInSection(sectionIndex);
                        System.Diagnostics.Debug.Assert(mdFiles.Count == dsReader.StreamCount);
                        int k = 0;
                        while (dsReader.CurrentStreamIndex < dsReader.StreamCount)
                        {
                            var mdFile = mdFiles[dsReader.CurrentStreamIndex];
                            if (mdFile != null)
                            {
                                System.Diagnostics.Debug.Assert(mdFile.Stream.SectionIndex == sectionIndex);
                                System.Diagnostics.Debug.Assert(mdFile.Stream.StreamIndex == dsReader.CurrentStreamIndex);
                                var substream = dsReader.OpenStream();
                                using (var outstream = new FileStream(@"_test\output_" + (++k) + "_" + mdFile.Name, FileMode.Create, FileAccess.ReadWrite, FileShare.Delete))
                                {
                                    outstream.SetLength(0);
                                    if (mdFile.Offset != 0)
                                    {
                                        throw new NotImplementedException();
                                    }
                                    substream.CopyTo(outstream);
                                }
                            }
                            dsReader.NextStream();
                        }
                    }
                }
            }
        }
Exemplo n.º 7
0
        public void Dispose()
        {
            if(m_archive != null)
                m_archive = null;

            if(m_reader != null)
                try { m_reader.Close(); }
                finally { m_reader = null; }

            if(m_writer != null)
            {
                try
                {
                    if(m_copyEncoder != null)
                        try
                        {
                            m_writer.ConnectEncoder(m_copyEncoder);
                            m_copyEncoder.Dispose();
                        }
                        finally { m_copyEncoder = null; }
    
                    if(m_lzma2Encoder != null)
                        try
                        {
                            m_writer.ConnectEncoder(m_lzma2Encoder);
                            m_lzma2Encoder.Dispose();
                        }
                        finally { m_lzma2Encoder = null; }
    
                    m_writer.WriteFinalHeader();
                }
                finally { m_writer = null; }
            }

            if(m_file != null)
                try { m_file.Dispose(); }
                finally { m_file = null; }
        }
Exemplo n.º 8
0
        static void Main()
        {
            Directory.CreateDirectory("_test");

            bool writeArchive = true;
            bool useOldWriter = false;
            bool readArchive = true;
            bool useOldReader = false;

            if (writeArchive)
            {
                if (useOldWriter)
                {
                    using (var stream = new FileStream(@"_test\test.7z", FileMode.Create, FileAccess.ReadWrite, FileShare.Delete))
                    using (var encryption = new AESEncryptionProvider("test"))
                    using (var encoder = new ArchiveWriter.Lzma2Encoder(null))
                    {
                        var writer = new ArchiveWriter(stream);
                        writer.DefaultEncryptionProvider = encryption;
                        writer.ConnectEncoder(encoder);
                        string path = Path.GetDirectoryName(typeof(Program).Assembly.Location);
                        var directory = new DirectoryInfo(path);
                        foreach (string filename in Directory.EnumerateFiles(path))
                            writer.WriteFile(directory, new FileInfo(filename));
                        writer.WriteFinalHeader();
                    }
                }
                else
                {
                    Task.Run(async delegate {
                        using (var archiveStream = new FileStream(@"_test\test.7z", FileMode.Create, FileAccess.ReadWrite, FileShare.Delete))
                        using (var archiveWriter = ManagedLzma.SevenZip.Writer.ArchiveWriter.Create(archiveStream, false))
                        {
                            var encoder = new ManagedLzma.SevenZip.Writer.EncoderDefinition();
                            ManagedLzma.SevenZip.Writer.EncoderNodeDefinition node1 = null;
                            ManagedLzma.SevenZip.Writer.EncoderNodeDefinition node2 = null;
                            //node1 = encoder.CreateEncoder(ManagedLzma.SevenZip.Encoders.CopyEncoderSettings.Instance);
                            //node1 = encoder.CreateEncoder(new ManagedLzma.SevenZip.Encoders.LzmaEncoderSettings(new ManagedLzma.LZMA.EncoderSettings()));
                            //node1 = encoder.CreateEncoder(new ManagedLzma.SevenZip.Encoders.Lzma2EncoderSettings(new ManagedLzma.LZMA2.EncoderSettings()));
                            node2 = encoder.CreateEncoder(new ManagedLzma.SevenZip.Writer.AesEncoderSettings(ManagedLzma.PasswordStorage.Create("test")));
                            if (node1 != null && node2 != null)
                            {
                                encoder.Connect(encoder.GetContentSource(), node1.GetInput(0));
                                encoder.Connect(node1.GetOutput(0), node2.GetInput(0));
                                encoder.Connect(node2.GetOutput(0), encoder.CreateStorageSink());
                            }
                            else
                            {
                                encoder.Connect(encoder.GetContentSource(), (node1 ?? node2).GetInput(0));
                                encoder.Connect((node1 ?? node2).GetOutput(0), encoder.CreateStorageSink());
                            }
                            encoder.Complete();

                            var metadata = new ManagedLzma.SevenZip.Writer.ArchiveMetadataRecorder();

                            var directory = new DirectoryInfo(Path.GetDirectoryName(typeof(Program).Assembly.Location));

                            bool useDistinctEncoders = false;

                            if (useDistinctEncoders)
                            {
                                foreach (var file in directory.EnumerateFiles())
                                {
                                    using (var session = archiveWriter.BeginEncoding(encoder, true))
                                    {
                                        using (var fileStream = file.OpenRead())
                                        {
                                            var result = await session.AppendStream(fileStream, true);
                                            metadata.AppendFile(file.Name, result.Length, result.Checksum, file.Attributes, file.CreationTimeUtc, file.LastWriteTimeUtc, file.LastAccessTimeUtc);
                                        }

                                        // TODO: ensure that everything still aborts properly if we don't call complete
                                        await session.Complete();
                                    }
                                }
                            }
                            else
                            {
                                using (var session = archiveWriter.BeginEncoding(encoder, true))
                                {
                                    foreach (var file in directory.EnumerateFiles())
                                    {
                                        using (var fileStream = file.OpenRead())
                                        {
                                            var result = await session.AppendStream(fileStream, true);
                                            metadata.AppendFile(file.Name, result.Length, result.Checksum, file.Attributes, file.CreationTimeUtc, file.LastWriteTimeUtc, file.LastAccessTimeUtc);
                                        }
                                    }

                                    // TODO: ensure that everything still aborts properly if we don't call complete
                                    await session.Complete();
                                }
                            }

                            await archiveWriter.WriteMetadata(metadata);
                            await archiveWriter.WriteHeader();
                        }
                    }).GetAwaiter().GetResult();
                }
            }

            if (readArchive)
            {
                if (useOldReader)
                {
                    var pass = new Password("test");
                    var db = new master._7zip.Legacy.CArchiveDatabaseEx();
                    var x = new master._7zip.Legacy.ArchiveReader();
                    x.Open(new FileStream(@"_test\test.7z", FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete));
                    x.ReadDatabase(db, pass);
                    db.Fill();
                    x.Extract(db, null, pass);
                }
                else
                {
                    var file = new FileStream(@"_test\test.7z", FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete);
                    var mdReader = new ManagedLzma.SevenZip.FileModel.ArchiveFileModelMetadataReader();
                    var mdModel = mdReader.ReadMetadata(file);
                    var password = ManagedLzma.PasswordStorage.Create("test");
                    for (int sectionIndex = 0; sectionIndex < mdModel.Metadata.DecoderSections.Length; sectionIndex++)
                    {
                        var dsReader = new ManagedLzma.SevenZip.Reader.DecodedSectionReader(file, mdModel.Metadata, sectionIndex, password);
                        var mdFiles = mdModel.GetFilesInSection(sectionIndex);
                        System.Diagnostics.Debug.Assert(mdFiles.Count == dsReader.StreamCount);
                        int k = 0;
                        while (dsReader.CurrentStreamIndex < dsReader.StreamCount)
                        {
                            var mdFile = mdFiles[dsReader.CurrentStreamIndex];
                            if (mdFile != null)
                            {
                                System.Diagnostics.Debug.Assert(mdFile.Stream.SectionIndex == sectionIndex);
                                System.Diagnostics.Debug.Assert(mdFile.Stream.StreamIndex == dsReader.CurrentStreamIndex);
                                var substream = dsReader.OpenStream();
                                using (var outstream = new FileStream(@"_test\output_" + (++k) + "_" + mdFile.Name, FileMode.Create, FileAccess.ReadWrite, FileShare.Delete))
                                {
                                    outstream.SetLength(0);
                                    if (mdFile.Offset != 0)
                                        throw new NotImplementedException();
                                    substream.CopyTo(outstream);
                                }
                            }
                            dsReader.NextStream();
                        }
                    }
                }
            }
        }