public void TestLoadingSavingFile00() { try { IStorage s1 = new FileStorage(); IStorage s2 = new FileStorage(); string str = "World Hello"; byte[] bytes = Encoding.ASCII.GetBytes(str); ulong signature = Utilities.MakeEightCC('T', 'E', 'S', 'T', ' ', ' ', ' ', ' '); s1.WriteBytes(signature, bytes); s1.WriteInteger(signature, 24); s1.WriteUnsignedInteger(signature, 2147483648); s1.WriteLong(signature, 3000000000); s1.WriteUnsignedLong(signature, 9223372036854775808); s1.WriteBoolean(signature, true); s1.WriteDouble(signature, 1.7); s1.WriteString(signature, "Hello World"); string filePath = Path.GetTempPath() + "test.bin"; ((FileStorage)s1).Save(filePath); ((FileStorage)s2).Load(filePath); byte[] a = s2.ReadBytes(signature); int b = s2.ReadInteger(signature); uint c = s2.ReadUnsignedInteger(signature); long d = s2.ReadLong(signature); ulong e = s2.ReadUnsignedLong(signature); bool f = s2.ReadBoolean(signature); double g = s2.ReadDouble(signature); string h = s2.ReadString(signature); Assert.AreEqual(bytes, a); Assert.AreEqual(24, b); Assert.AreEqual(2147483648, c); Assert.AreEqual(3000000000, d); Assert.AreEqual(9223372036854775808, e); Assert.AreEqual(true, f); Assert.AreEqual(1.7, g); Assert.AreEqual("Hello World", h); } finally { File.Delete(Path.GetTempPath() + "test.bin"); } }
private void SaveFileInternal(string filePath) { IStorage storage = new FileStorage(); DataHeader header = new DataHeader(); long initialPosition, currentPosition = 0; //Serialize states storage.Seek(header.HeaderSize, SeekOrigin.Current); initialPosition = storage.GetPosition(); this.graphProperties.Serialize(storage); currentPosition = storage.GetPosition(); header.DataSize = currentPosition - initialPosition; storage.Seek(-(header.HeaderSize + header.DataSize), SeekOrigin.Current); header.Serialize(storage); storage.Seek(header.DataSize, SeekOrigin.Current); //Serialize slots List<ISlot> slotList = new List<ISlot>(this.slotCollection.Values); storage.WriteInteger(FieldCode.SlotCount, slotList.Count); foreach (ISlot slot in slotList) { storage.Seek(header.HeaderSize, SeekOrigin.Current); initialPosition = storage.GetPosition(); slot.Serialize(storage); currentPosition = storage.GetPosition(); header.DataSize = currentPosition - initialPosition; storage.Seek(-(header.HeaderSize + header.DataSize), SeekOrigin.Current); header.Serialize(storage); storage.Seek(header.DataSize, SeekOrigin.Current); } //Serialize nodes List<IVisualNode> nodeList = new List<IVisualNode>(this.nodeCollection.Values); storage.WriteInteger(FieldCode.NodeCount, nodeList.Count); foreach (IVisualNode node in nodeList) { storage.Seek(header.HeaderSize, SeekOrigin.Current); initialPosition = storage.GetPosition(); node.Serialize(storage); currentPosition = storage.GetPosition(); header.DataSize = currentPosition - initialPosition; storage.Seek(-(header.HeaderSize + header.DataSize), SeekOrigin.Current); header.Serialize(storage); storage.Seek(header.DataSize, SeekOrigin.Current); } //Serialize edges List<IVisualEdge> edgeList = this.edgeController.GetVisualEdges(); storage.WriteInteger(FieldCode.EdgeCount, edgeList.Count); foreach (IVisualEdge edge in edgeList) { storage.Seek(header.HeaderSize, SeekOrigin.Current); initialPosition = storage.GetPosition(); edge.Serialize(storage); currentPosition = storage.GetPosition(); header.DataSize = currentPosition - initialPosition; storage.Seek(-(header.HeaderSize + header.DataSize), SeekOrigin.Current); header.Serialize(storage); storage.Seek(header.DataSize, SeekOrigin.Current); } ((FileStorage)storage).Save(filePath); }