public void Deserialize(Stream stream) { List<PackageEntry> entries = new List<PackageEntry>(); // Types while (true) { string typeName = stream.ReadASCIIZ(); if (typeName == "") { break; } // Directories while (true) { string directoryName = stream.ReadASCIIZ(); if (directoryName == "") { break; } // Files while (true) { string fileName = stream.ReadASCIIZ(); if (fileName == "") { break; } PackageEntry entry = new PackageEntry(); entry.FileName = fileName; entry.DirectoryName = directoryName.Replace("/", "\\"); entry.TypeName = typeName; entry.HashOrTimestamp = stream.ReadU32(); entry.SmallData = new byte[stream.ReadU16()]; entry.ArchiveIndex = stream.ReadU16(); entry.Offset = stream.ReadU32(); entry.Size = stream.ReadU32(); entry.Unknown = stream.ReadU16(); if (entry.Unknown != 0xFFFF) { throw new PackageFileException(); } if (entry.SmallData.Length > 0) { stream.Read(entry.SmallData, 0, entry.SmallData.Length); } entries.Add(entry); } } } this.Entries = entries; }
public void Deserialize(Stream stream) { List <PackageEntry> entries = new List <PackageEntry>(); // Types while (true) { string typeName = stream.ReadASCIIZ(); if (typeName == "") { break; } // Directories while (true) { string directoryName = stream.ReadASCIIZ(); if (directoryName == "") { break; } // Files while (true) { string fileName = stream.ReadASCIIZ(); if (fileName == "") { break; } PackageEntry entry = new PackageEntry(); entry.FileName = fileName; entry.DirectoryName = directoryName.Replace("/", "\\"); entry.TypeName = typeName; entry.HashOrTimestamp = stream.ReadU32(); entry.SmallData = new byte[stream.ReadU16()]; entry.ArchiveIndex = stream.ReadU16(); entry.Offset = stream.ReadU32(); entry.Size = stream.ReadU32(); entry.Unknown = stream.ReadU16(); if (entry.Unknown != 0xFFFF) { throw new PackageFileException(); } if (entry.SmallData.Length > 0) { stream.Read(entry.SmallData, 0, entry.SmallData.Length); } entries.Add(entry); } } } this.Entries = entries; }