private void WriteData(Cardfile file, BinaryWriter writer) { writer.Write((uint)file.Cards.Count); writer.Write((uint)file.FrontIndex); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); List <Offset> offsets = new List <Offset>(); foreach (Card card in file.Cards) { writer.Flush(); Offset offset = new Offset(writer.BaseStream.Position, 0, -1); offsets.Add(offset); byte[] indexu8 = encoding.GetBytes(card.Index); writer.Flush(); writer.Write(offset.text); writer.Write(offset.file); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)indexu8.Length); writer.Write(indexu8); } // text data int i = 0; foreach (Card card in file.Cards) { writer.Flush(); offsets[i] = new Offset(offsets[i].ptr, (uint)writer.BaseStream.Position, 0); byte[] text = encoding.GetBytes(card.Contents); writer.Write((ulong)text.Length); writer.Write(text); ++i; } // attached file i = 0; foreach (Card card in file.Cards) { writer.Flush(); if (card.Attachment != null) { offsets[i] = new Offset(offsets[i].ptr, offsets[i].text, (uint)writer.BaseStream.Position); byte[] text = encoding.GetBytes(card.Attachment.Name); writer.Write((uint)text.Length); writer.Write(text); text = encoding.GetBytes(card.Attachment.Mime); writer.Write((uint)text.Length); writer.Write(text); writer.Write((ulong)card.Attachment.Data.Length); writer.Write(card.Attachment.Data); } else { offsets[i] = new Offset(offsets[i].ptr, offsets[i].text, NO_FILE); } ++i; } foreach (Offset offset in offsets) { writer.Flush(); writer.BaseStream.Seek(offset.ptr, SeekOrigin.Begin); writer.Write(offset.text); writer.Write(offset.file); } }