Пример #1
0
        public static void Save(string filePath, List <object> objects)
        {
            using (var writer = new BinaryWriter(File.Open(filePath, FileMode.Create, FileAccess.Write, FileShare.None)))
            {
                foreach (var topLevelObject in objects)
                {
                    // Allocate file space for a fake entry with all zeros
                    var entry = new Entry();
                    RTTI.SerializeType(writer, entry);

                    if (topLevelObject is byte[] asBytes)
                    {
                        // Handle unsupported (raw data) object types
                        writer.Write(asBytes);
                    }
                    else
                    {
                        RTTI.SerializeType(writer, topLevelObject);
                    }

                    entry.TypeId    = RTTI.GetIdByType(topLevelObject.GetType());
                    entry.ChunkSize = (uint)(writer.BaseStream.Position - entry.ChunkOffset - 12);

                    // Now rewrite it with the updated fields
                    long oldPosition = writer.BaseStream.Position;
                    writer.BaseStream.Position = entry.ChunkOffset;
                    RTTI.SerializeType(writer, entry);
                    writer.BaseStream.Position = oldPosition;
                }
            }
        }
Пример #2
0
 public void AddObject(object obj)
 {
     Entries.Add(new CoreEntry()
     {
         TypeId          = RTTI.GetIdByType(obj.GetType()),
         ContainedObject = obj,
     });
 }