public void Write() { using (MemoryStream headerBuff = new MemoryStream(32768)) using (MemoryStream textBuff = new MemoryStream(32768)) { ArchiveListingBlockInfo[] blocksInfo; ArchiveListingEntryInfoV2[] entriesInfoV2; ArchiveListingTextWriterV2 textWriter = new ArchiveListingTextWriterV2(textBuff); textWriter.Write(_listing, out blocksInfo, out entriesInfoV2); for (int i = 0; i < entriesInfoV2.Length; i++) { ArchiveListingEntryInfoV2 info = entriesInfoV2[i]; ArchiveEntry entry = _listing[i]; info.UnknownNumber = entry.UnknownNumber; info.UnknownValue = entry.UnknownValue; info.UnknownData = entry.UnknownData; } byte[] buff = new byte[8192]; int blocksSize = (int)textBuff.Position; textBuff.Position = 0; ArchiveListingHeaderV2 header = (ArchiveListingHeaderV2)_listing.Header; header.EntriesCount = entriesInfoV2.Length; header.RawBlockOffset = entriesInfoV2.Length * 8 + 12; header.RawInfoOffset = header.RawBlockOffset + blocksInfo.Length * 12; headerBuff.WriteContent(header); foreach (ArchiveListingEntryInfoV2 entry in entriesInfoV2) { headerBuff.WriteContent(entry); } foreach (ArchiveListingBlockInfo block in blocksInfo) { headerBuff.WriteStruct(block); } int hederSize = (int)headerBuff.Length; headerBuff.Position = 0; if (header.IsEncrypted) { RecreateEncryptedListing(headerBuff, hederSize, textBuff, blocksSize, buff); } else { using (Stream output = _accessor.RecreateListing(hederSize + blocksSize)) { headerBuff.CopyToStream(output, hederSize, buff); textBuff.CopyToStream(output, blocksSize, buff); } } } }
public void Write() { using (MemoryStream headerBuff = new MemoryStream(32768)) using (MemoryStream textBuff = new MemoryStream(32768)) { ArchiveListingBlockInfo[] blocksInfo; ArchiveListingEntryInfoV2[] entriesInfoV2; ArchiveListingTextWriterV2 textWriter = new ArchiveListingTextWriterV2(textBuff); textWriter.Write(_listing, out blocksInfo, out entriesInfoV2); for (int i = 0; i < entriesInfoV2.Length; i++) { ArchiveListingEntryInfoV2 info = entriesInfoV2[i]; ArchiveEntry entry = _listing[i]; info.UnknownNumber = entry.UnknownNumber; info.UnknownValue = entry.UnknownValue; info.UnknownData = entry.UnknownData; } byte[] buff = new byte[8192]; int blocksSize = (int)textBuff.Position; textBuff.Position = 0; ArchiveListingHeaderV2 header = (ArchiveListingHeaderV2)_listing.Header; header.EntriesCount = entriesInfoV2.Length; header.RawBlockOffset = entriesInfoV2.Length * 8 + 12; header.RawInfoOffset = header.RawBlockOffset + blocksInfo.Length * 12; headerBuff.WriteContent(header); foreach (ArchiveListingEntryInfoV2 entry in entriesInfoV2) headerBuff.WriteContent(entry); foreach (ArchiveListingBlockInfo block in blocksInfo) headerBuff.WriteStruct(block); int hederSize = (int)headerBuff.Length; headerBuff.Position = 0; if (header.IsEncrypted) { RecreateEncryptedListing(headerBuff, hederSize, textBuff, blocksSize, buff); } else { using (Stream output = _accessor.RecreateListing(hederSize + blocksSize)) { headerBuff.CopyToStream(output, hederSize, buff); textBuff.CopyToStream(output, blocksSize, buff); } } } }