public void WriteV13(FileStream mainStream) { long totalSize = _package.Files.Sum(p => (long)p.Size()); long currentSize = 0; var writtenFiles = new List <PackagedFileInfo>(); foreach (AbstractFileInfo file in _package.Files) { WriteProgress(file, currentSize, totalSize); writtenFiles.Add(WriteFile(file)); currentSize += file.Size(); } using (var writer = new BinaryWriter(mainStream, new UTF8Encoding(), true)) { var header = new LSPKHeader13 { Version = (uint)Version, FileListOffset = (UInt32)mainStream.Position }; writer.Write((UInt32)writtenFiles.Count); var fileList = new MemoryStream(); var fileListWriter = new BinaryWriter(fileList); foreach (PackagedFileInfo file in writtenFiles) { FileEntry13 entry = file.MakeEntryV13(); BinUtils.WriteStruct(fileListWriter, ref entry); } byte[] fileListBuf = fileList.ToArray(); fileListWriter.Dispose(); byte[] compressedFileList = LZ4Codec.EncodeHC(fileListBuf, 0, fileListBuf.Length); writer.Write(compressedFileList); header.FileListSize = (UInt32)mainStream.Position - header.FileListOffset; header.NumParts = (UInt16)_streams.Count; header.Priority = _package.Metadata.Priority; header.Flags = (byte)_package.Metadata.Flags; header.Md5 = ComputeArchiveHash(); BinUtils.WriteStruct(writer, ref header); writer.Write((UInt32)(8 + Marshal.SizeOf(typeof(LSPKHeader13)))); writer.Write(Package.Signature); } }
public void WriteV13(FileStream mainStream) { long totalSize = package.Files.Sum(p => (long)p.Size()); long currentSize = 0; List <PackagedFileInfo> writtenFiles = new List <PackagedFileInfo>(); foreach (var file in this.package.Files) { writeProgress(file, currentSize, totalSize); writtenFiles.Add(WriteFile(file)); currentSize += file.Size(); } using (var writer = new BinaryWriter(mainStream, new UTF8Encoding(), true)) { var header = new LSPKHeader13(); header.Version = Version; header.FileListOffset = (UInt32)mainStream.Position; writer.Write((UInt32)writtenFiles.Count); var fileList = new MemoryStream(); var fileListWriter = new BinaryWriter(fileList); foreach (var file in writtenFiles) { var entry = file.MakeEntryV13(); BinUtils.WriteStruct <FileEntry13>(fileListWriter, ref entry); } var fileListBuf = fileList.ToArray(); fileListWriter.Dispose(); var compressedFileList = LZ4Codec.EncodeHC(fileListBuf, 0, fileListBuf.Length); writer.Write(compressedFileList); header.FileListSize = (UInt32)mainStream.Position - header.FileListOffset; header.NumParts = (UInt16)streams.Count; header.SomePartVar = 0; // ??? header.ArchiveGuid = Guid.NewGuid(); BinUtils.WriteStruct <LSPKHeader13>(writer, ref header); writer.Write((UInt32)(8 + Marshal.SizeOf(typeof(LSPKHeader13)))); writer.Write(Package.Signature); } }
public void WriteV13(FileStream mainStream) { long totalSize = package.Files.Sum(p => (long)p.Size()); long currentSize = 0; List<PackagedFileInfo> writtenFiles = new List<PackagedFileInfo>(); foreach (var file in this.package.Files) { writeProgress(file, currentSize, totalSize); writtenFiles.Add(WriteFile(file)); currentSize += file.Size(); } using (var writer = new BinaryWriter(mainStream, new UTF8Encoding(), true)) { var header = new LSPKHeader13(); header.Version = Version; header.FileListOffset = (UInt32)mainStream.Position; writer.Write((UInt32)writtenFiles.Count); var fileList = new MemoryStream(); var fileListWriter = new BinaryWriter(fileList); foreach (var file in writtenFiles) { var entry = file.MakeEntryV13(); BinUtils.WriteStruct<FileEntry13>(fileListWriter, ref entry); } var fileListBuf = fileList.ToArray(); fileListWriter.Dispose(); var compressedFileList = LZ4Codec.EncodeHC(fileListBuf, 0, fileListBuf.Length); writer.Write(compressedFileList); header.FileListSize = (UInt32)mainStream.Position - header.FileListOffset; header.NumParts = (UInt16)streams.Count; header.SomePartVar = 0; // ??? header.ArchiveGuid = Guid.NewGuid(); BinUtils.WriteStruct<LSPKHeader13>(writer, ref header); writer.Write((UInt32)(8 + Marshal.SizeOf(typeof(LSPKHeader13)))); writer.Write(Package.Signature); } }