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! } }
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(); }