メモりマップドファイル


 ファイル・イメージをメモりにマッピングすることにより、高速かつ簡単に
ファイルを操作することが出来ます。この方法の事をメモりマップドファイルといいます。

	class CFileMemoMap
	{
	public:
		CFileMemoMap();
		virtual ~CFileMemoMap();

		//メソッド関数
		void SetReadMemoryMap();    //ファイルをメモりにマッピングする
		void CloseMemoryMap();      //メモリマップドファイルを閉じる

		//メソッド変数
		char* m_pMapView ;         //メモリマップドファイル操作用ポインタ
		LPCTSTR m_strFName;        //マッピングするファイル(フルパス)

	private:
		//変数
		char* pTopMapView ;        //メモリマップドファイルの先頭アドレス
		HANDLE hFile ;             //指定ファイルのハンドル
		HANDLE hMap ;              //メモリマップドファイルのハンドル
	};

	void CFileMemoMap::SetReadMemoryMap()
	{
		
		// open file
		hFile = CreateFile( m_strFName, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0 ) ;
		if( hFile == INVALID_HANDLE_VALUE )
			return ;

		// create mapping
		hMap = CreateFileMapping( hFile, 0, PAGE_READONLY, 0, 0, "spacesoft" ) ;
		if( hMap <= 0 )
			return ;

		// map to memory(ポインタm_pMapViewを操作することにより高速かつ簡単にファイル操作が出来る)
		m_pMapView = (char *)MapViewOfFile( hMap, FILE_MAP_READ, 0, 0, 0 ) ;
		pTopMapView = m_pMapView ;
	}

	//メモリマップドファイルを解放する
	void CFileMemoMap::CloseMemoryMap()
	{
		CloseHandle( hMap  ) ;
		CloseHandle( hFile ) ;
	}