示例#1
0
 public void WriteStream(FileStream stream)
 {
     BinaryHelper.WriteString(stream, filename, 32);
     BinaryHelper.WriteUInt16(stream, year);
     BinaryHelper.WriteUInt16(stream, month);
     BinaryHelper.WriteUInt16(stream, day);
     BinaryHelper.WriteUInt16(stream, hour);
     BinaryHelper.WriteUInt16(stream, minute);
     BinaryHelper.WriteUInt16(stream, second);
     BinaryHelper.WriteUInt32(stream, fileLength);
 }
示例#2
0
        public void WriteStream(FileStream stream)
        {
            var padding_size = 2048;

            // header
            BinaryHelper.WriteString(stream, header, 4);
            BinaryHelper.WriteUInt32(stream, numFiles);

            // table of contents
            for (var i = 0; i < numFiles; ++i)
            {
                var toc_entry = tableOfContents[i];
                toc_entry.WriteStream(stream);
            }

            // padding (table of contents is 512 KB)
            var tableOfContentsSize = padding_size * 256;

            BinaryHelper.WriteAFSPadding(stream, stream.Position, tableOfContentsSize);

            // directory information is at the very end of the table of contents block, past the padding
            stream.Position -= 8;

            BinaryHelper.WriteUInt32(stream, filenameDirectoryOffset);
            BinaryHelper.WriteUInt32(stream, filenameDirectoryLength);

            // data (will need to update ToC entry's from here)
            for (var i = 0; i < numFiles; ++i)
            {
                var toc_entry = tableOfContents[i];
                toc_entry.offset = (uint)stream.Position;

                var afs_file = files[i];
                afs_file.WriteStream(stream);

                // padding
                BinaryHelper.WriteAFSPadding(stream, stream.Position, padding_size);
            }

            filenameDirectoryOffset = (uint)stream.Position;

            // directory
            for (var i = 0; i < numFiles; ++i)
            {
                var dir_entry = directory[i];
                dir_entry.WriteStream(stream);
            }

            filenameDirectoryLength = (uint)(stream.Position - filenameDirectoryOffset);

            // padding
            BinaryHelper.WriteAFSPadding(stream, stream.Position, padding_size);

            // go back and re-write the table of contents, with the updated information
            stream.Position = 8; // header = 4, numfiles = 4

            // table of contents
            for (var i = 0; i < numFiles; ++i)
            {
                var toc_entry = tableOfContents[i];
                toc_entry.WriteStream(stream);
            }

            BinaryHelper.WriteUInt32(stream, filenameDirectoryOffset);
            BinaryHelper.WriteUInt32(stream, filenameDirectoryLength);
        }