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

- 파일 오픈                                                                  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;
 
  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 );
 
  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;
  }
 
  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;
}
 
2006/12/07 10:53 2006/12/07 10:53

글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

덧글을 달아 주세요