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