Exemplo n.º 1
0
        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);
                        }
                    }
                }
        }
Exemplo n.º 2
0
        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);
                    }
                }
            }
        }