Beispiel #1
0
        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);
            }
        }