Ejemplo n.º 1
0
        public void Export(ArchiveProject project, Stream stream)
        {
            BinaryWriter writer = new BinaryWriter(stream);

            PAKMainHeader mainHeader    = new PAKMainHeader();
            long          startPosition = stream.Position;

            stream.Seek(PAKMainHeader.SIZE_OF, SeekOrigin.Current);

            ICollection <ArchiveProjectEntry> entries = project.GetFiles();
            List <PAKFileHeader> fileHeaders          = new List <PAKFileHeader>();

            foreach (ArchiveProjectEntry entry in entries)
            {
                byte[] contents = File.ReadAllBytes(entry.Path);

                PAKFileHeader header = new PAKFileHeader
                {
                    Name   = entry.RelativePath.ToCharArray(),
                    Offset = mainHeader.DirectoryOffset,
                    Size   = contents.Length
                };

                writer.Write(contents);

                mainHeader.DirectoryOffset += contents.Length;
                mainHeader.DirectoryLength += PAKFileHeader.SIZE_OF;

                fileHeaders.Add(header);
            }

            fileHeaders.ForEach(header => header.Write(writer));

            stream.Position = startPosition;
            mainHeader.Write(writer);
            stream.Position = startPosition + mainHeader.DirectoryOffset + mainHeader.DirectoryLength;
        }