示例#1
0
        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();
        }