Example #1
0
        public void Unarchive()
        {
            using (var inputStream = new FileStream(SourcePath, FileMode.Open, FileAccess.Read))
            {
                using (var tempStream = new FileStream(SourcePath + ".tmp", FileMode.Create, FileAccess.ReadWrite))
                {
                    Compressor.GzipDecompress(inputStream, tempStream);

                    tempStream.Seek(0, SeekOrigin.Begin);

                    var header = new ArchiveEntityHeader();
                    header.ReadStream(tempStream);

                    for (int i = 0; i < header.Length; i++)
                    {
                        var archiveFile = new ArchiveFile();
                        archiveFile.ReadHeader(tempStream);
                        archiveFile.AbsolutePath = Path.Combine(TargetPath, archiveFile.RelativePath);

                        ArchiveItems.Add(archiveFile);
                    }

                    ArchiveItems.ForEach(x => x.ReadContent(tempStream));
                }

                File.Delete(SourcePath + ".tmp");
            }
        }
Example #2
0
        public void Archive()
        {
            using (var tempStream = new FileStream(TargetPath + ".tmp", FileMode.Create, FileAccess.ReadWrite))
            {
                var fileHeader = new ArchiveEntityHeader()
                {
                    RelativePath = "",
                    Length       = ArchiveItems.Sum(x => x.GetFiles()),
                    HashValue    = "",
                };
                fileHeader.WriteStream(tempStream);

                ArchiveItems.ForEach(x => x.WriteHeader(tempStream));
                ArchiveItems.ForEach(x => x.WriteContent(tempStream));

                tempStream.Seek(0, SeekOrigin.Begin);

                using (var outputStream = new FileStream(TargetPath, FileMode.Create, FileAccess.Write))
                {
                    Compressor.GzipCompress(tempStream, outputStream);
                }
            }

            File.Delete(TargetPath + ".tmp");
        }