public void Pack() { var outputStream = File.Open(_outFile, FileMode.OpenOrCreate, FileAccess.ReadWrite); _packHeader.Signature = new byte[] { 0x50, 0x41, 0x43, 0x4B, 0x02, 0x01, 0x00, 0x00 }; _packHeader.D1 = 1; _packHeader.Sum = (uint)_packList.Count; _packHeader.DataPath = "data\\"; _packHeader.FileTime1 = DateTime.UtcNow.ToFileTimeUtc(); _packHeader.FileTime2 = DateTime.UtcNow.ToFileTimeUtc(); _packHeader.FileCount = (uint)_packList.Count; _packHeader.HeaderLength = 0; _packHeader.DataLength = (uint)_bodyStream.Position; _packHeader.BlankLength = 0; _packHeader.Zero = new byte[16]; var infos = new List <Tuple <byte[], PackageItemInfo> >(); foreach (var entry in _packList) { var info = new PackageItemInfo { CompressedSize = (int)entry.CompressedSize, DecompressedSize = (int)entry.DecompressedSize, IsCompressed = entry.IsCompressed, DataOffset = entry.DataOffset, Seed = (int)entry.Seed, FileTime1 = entry.FileTime1, FileTime3 = entry.FileTime3, FileTime5 = entry.FileTime5 }; var bytes = EncodeName(entry.FullName); infos.Add(Tuple.Create(bytes, info)); _packHeader.HeaderLength += (uint)(bytes.Length + StructHelper.SizeOf <PackageItemInfo>()); } _packHeader.WriteToStream(outputStream); foreach (var packInfo in infos) { outputStream.Write(packInfo.Item1, 0, packInfo.Item1.Length); packInfo.Item2.WriteToStream(outputStream); } _bodyStream.Position = 0; _bodyStream.CopyTo(outputStream); outputStream.Flush(); outputStream.Close(); outputStream.Dispose(); }
public void Pack() { var outputStream = File.Open(_outFile, FileMode.OpenOrCreate, FileAccess.ReadWrite); _packHeader.WriteToStream(outputStream); foreach (var packInfo in _outputPackageItemInfos) { outputStream.Write(packInfo.Item1, 0, packInfo.Item1.Length); packInfo.Item2.WriteToStream(outputStream); } _bodyStream.Position = 0; _bodyStream.CopyTo(outputStream); outputStream.Flush(); outputStream.Close(); outputStream.Dispose(); }