示例#1
0
        public void write(Writer writer)
        {
            // firstly we setout the file
            // write a bunch of blanks

            writer.Write(signature);
            writer.Write((ushort)files.Count);

            foreach (FileInfo f in files)     // write each file's header
            {
                f.writeFileHeader(writer, 0); // write our file header data
            }
            foreach (FileInfo f in files)     // write "Filler Data"
            {
                f.offset = (uint)writer.BaseStream.Position;
                byte[] b = new byte[f.fileData.Length]; // load up a set of blanks with the same size as the original set
                writer.Write(b);                        // fill the file up with blank data
            }

            // now we really write our data

            writer.seek(0, SeekOrigin.Begin); // jump back to the start of the file

            writer.Write(signature);
            writer.Write((ushort)files.Count);         // re-write our header

            foreach (FileInfo f in files)              // for each file
            {
                f.writeFileHeader(writer, f.offset);   // write our header
                long pos = writer.BaseStream.Position; // get our writer pos for later
                writer.BaseStream.Position = f.offset; // jump to our saved offset
                f.writeFileData(writer);               // write our file data
                writer.BaseStream.Position = pos;      // jump back ready to write the next file!
            }
        }
示例#2
0
        public void write(Writer writer)
        {
            using (var stream = new MemoryStream())
            {
                using (var cwriter = new Writer(stream))
                {
                    cwriter.Write(signature);

                    cwriter.Write(0x00); // data size (temp)

                    int loop = 0;
                    while (loop++ < 2)
                    {
                        if (loop == 2)
                        {
                            cwriter.Write(stream.ToArray().Length - 4); // data size (real)
                        }
                        cwriter.Write((ushort)rows.Count);
                        cwriter.Write((byte)columns.Count);

                        for (int i = 0; i < columns.Count; i++)
                        {
                            columns[i].write(cwriter);
                        }

                        for (int i = 0; i < rows.Count; i++)
                        {
                            rows[i].write(cwriter);
                        }

                        if (loop == 1)
                        {
                            cwriter.seek(4, SeekOrigin.Begin);
                        }
                    }
                }
                writer.writeCompressedRaw(stream.ToArray());
            }

            writer.Close();
        }