블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (666)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (105)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (217)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total343,756
Today5
Yesterday73

파일내용을 그대로 메모리에 올려서 메모리에 올려진 파일내용을 수정하고 수정된 내용을 디스크 파일에 쓴다.

순서는 다음과 같다.

- 파일 오픈                                                                               hF=CreateFile("test.txt")
- 파일 내용을 메모리에 올린다                                                hMapF=CreateFileMapping(hF)
- 메모리에 올려진 첫번째 주소를 얻는다.                               pF=MapViewOfFile(hMapF)
- 첫번째 주소로 메모리 내용을 조작한다.
- 중간중간에 변경된 내용을 강제로 디스크에 쓰게만든다.    FlushViewOfFile(pF)
- 해제.                                                                                      UnmapViewOfFile(pF);
- 해제.                                                                                      CloseHandle(hMapF);
- 파일 닫기.                                                                              CloseHandle(hF);

<예제>

#include <windows.h>
#include <stdio.h>
 
int main(int argc, char **argv)
{
  HANDLE hFile, hMapFile;
  DWORD dwFileSize;
  char *pFile, *pFileTemp;
  
  // MMF 1단계 : 파일 Create 또는 OPEN
  hFile = CreateFile( "test.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  // hFile = CreateFile( "test.txt", GENERIC_READ, FILESHARE_READ, NULL, OPEN_EXISTING, 0, NULL); // 읽기
 
  dwFileSize = GetFileSize( hFile, NULL );
  // MMF 2단계 : 파일 Mapping 생성  
  hMapFile = CreateFileMapping( hFile, NULL, PAGE_READWRITE, 0, 0, NULL );
  // hMapFile = CreateFileMapping( hFile, NULL, PAGE_READONLY, 0, 0, NULL );    // 읽기
 
  if( hMapFile == NULL )
  {
    printf( "CreateFileMapping() fail" );
    CloseHandle( hFile );
    return 1;
  }
  // MMF 3단계 : 매핑 객체를 사용해서 파일을 가상 주소와 연결.
  pFile = (char*)MapViewOfFile( hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0 );
  //pFile = (char*)MapViewOfFile( hMapFile, FILE_MAP_READ, 0, 0, 0 );
 
 
  // Do SomeThing...
  pFileTemp = pFile;
 
  for(UINT i = 0; i < dwFileSize; i++ )
  {
    *pFileTemp = (*pFileTemp + 1);
    pFileTemp++;
  }
  // SomeThing End..
 
 
  //메모리 내용을 강제로 파일에 쓴다.
  FlushViewOfFile( pFile, 0 );
 
  UnmapViewOfFile( pFile );
  CloseHandle( hMapFile );
  CloseHandle( hFile );
 
  return 0;
}

추가 참고 :
http://dakuo.tistory.com/112
http://blog.naver.com/kkan22?Redirect=Log&logNo=80109503987

'Study > C++' 카테고리의 다른 글

boost 설치 하기  (0) 2010.08.10
boost.org 에 있는 boost library 목록 정리  (0) 2010.08.10
File Memory Mapping - 대용량 파일 입출력 처리 [펌]  (0) 2010.08.07
Virtual inheritance  (0) 2010.07.29
vswprintf_s 사용법  (0) 2010.07.08
선언과 정의  (0) 2010.07.08
Posted by 붕대마음

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함