示例#1
0
        public ChunkBase NextChunk(Vault vault)
        {
            var header = new ChunkBlockHeader();

            header.Read(vault, Reader);
            ChunkBase chunk = null;

            switch (header.ID)
            {
            case 0x53747245:
                chunk = new BinStringsChunk();
                break;

            case 0x5374724E:
                chunk = new VltStartChunk();
                break;

            case 0x456E6443:
                chunk = new EndChunk();
                break;

            case 0x56657273:
                chunk = new VltVersionChunk();
                break;

            case 0x4465704E:
                chunk = new VltDependencyChunk();
                break;

            case 0x4578704E:
                chunk = new VltExportChunk();
                break;

            case 0x5074724E:
                chunk = new VltPointersChunk();
                break;

            default:
                chunk = new GenericChunk(header.ID);
                break;
            }

            chunk.Offset = header.Offset;
            chunk.Size   = header.Size + 8;

            return(chunk);
        }
示例#2
0
        private Stream BuildBinStream()
        {
            MemoryStream ms = new MemoryStream(8192);
            BinaryWriter bw = new BinaryWriter(ms);

            ChunkWriter cw         = new ChunkWriter(bw, Vault);
            var         stringsSet = new HashSet <string>();

            var strings = Vault.SaveContext.Collections.SelectMany(CollectStrings).ToList();

            stringsSet.UnionWith(strings);
            var stringsChunk = new BinStringsChunk {
                Strings = new List <string>(stringsSet)
            };

            cw.WriteChunk(stringsChunk);
            cw.WriteChunk(new EndChunk());

            return(ms);
        }