We start from the clRawFile
class, which uses OS-specific memory-mapping routines to map files into the memory:
class clRawFile: public iRawFile { public: RawFile() {} virtual ~RawFile() { Close(); }
The Open()
member function does most of the heavy lifting. It stores physical and virtual file names, opens a file handle and creates a mapped view of the file:
bool Open( const std::string& FileName, const std::string& VirtualFileName ) { SetFileName( FileName ); SetVirtualFileName( VirtualFileName ); FSize = 0; FFileData = nullptr;
With Windows, we use CreateFileA()
to open the file. As usual, we enclose the OS-specific parts in #ifdef
blocks.:
#ifdef _WIN32 FMapFile = CreateFileA( FFileName.c_str(), GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, nullptr );
Once the file is opened, we create a mapping object and retrieve a pointer...