public void write(Writer writer) { // Initial File Write int headerSize = 0; writer.Write(headerSize); writer.Write((byte)directories.Count); foreach (DirInfo dir in directories) { dir.write(writer); } headerSize = (int)writer.BaseStream.Position; int dirID = 0; directories[dirID].startOffset = 0; foreach (FileInfo file in files) { if (file.directoryID == dirID) { file.write(writer); } else { dirID++; directories[dirID].startOffset = (int)writer.BaseStream.Position - headerSize; file.write(writer); } } // Real File write writer.seek(0, System.IO.SeekOrigin.Begin); writer.Write(headerSize); writer.Write((byte)directories.Count); foreach (DirInfo dir in directories) { dir.write(writer); } dirID = 0; foreach (FileInfo file in files) { if (file.directoryID == dirID) { file.write(writer); } else { dirID++; file.write(writer); } } writer.Close(); }