[C++]File Memory Mapping - 대용량 파일 입출력 처리
프로그래밍/소스 코드 | 2006/12/07 10:53

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

- 파일 오픈                                                                  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;
}
 
Trackback http://www.npteam.net/trackback/442
Name
Password
Homepage
  Secret
Description
 

BLOG main image
전체 (360)
Project (7)
TTF 강좌 (21)
Tip&Tech (57)
프로그래밍 (148)
DATABASE (9)
자료실 (104)
디아블로2 (2)
TTF 개인.. (11)
영어 관련 (0)
<<   2009/01   >>
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
2009/01
2008/12
2008/10
2008/09
2008/08
네, 비주얼 ..
    01/04 - TTF
관리자만 볼..
    01/04 -
잘 보고 갑..
    2008 - elther
namo님 지적..
    2008 - TTF
http://msdn..
    2008 - TTF
VC6에서 UNI..
    2006 - HaruSchool
ActiveX 상..
ADODB, OLED..
bootflashdo..
CD 없이 게..
CNX 17기 썽..
code2dive ..
CodeProject..
codeway - ..
ColorSchemes
cpueblo's b..
Crystal Flo..
C프로그래밍..
DataBaser.net
DB 디자인 ..
DirectX 9.0..
Dual - 네이..
Dual - 홈페..
DVD인포 국..
Encoding, D..
FastDelegate
guru 3d(최..
http 파일 ..
IBM UML링크
INF, WMI, V..
Inxzone - ..
MFC 관련 네..
MFC 기초 강..
MFC 유용한 ..
MFC 컨트롤 ..
MS 다운로드..
MSDN shell ..
MSDN 공용 ..
Mysql DB 디..
Naughter의 ..
POSA2 DEVPI..
Rainmeter
SQL Compact
SVN NOTIFY
TCP 레지스..
Time4Crime(..
UML Case To..
UML 관련 정..
vc++ 소스와..
vivaman - ..
Win32 Debug..
winapi - AP..
xlsvba 카페
XML 입문
XType님의 ..
yoda의 홈페..
가상 플로피..
공박스(택배..
구글번역(영..
구글번역(한..
김상욱 개발..
김태형님 블..
꿀뷰
네이버 지하..
대한민국 법..
디버거 툴 ..
디버그 랩
디스어셈블..
마소 TechNet
망사2 PC방 ..
메뉴얼 언패..
미디어 컨버트
버그 리포트..
비스무리(송..
비주얼 베이..
서울시 버스..
서울시교통..
스프링노트
시디 커버 ..
시디알인포 ..
신용우님 FP..
신화방송국
싸미월드
안준석님 블..
알고리즘 심..
언패킹 강좌..
여리의 작업실
영어 듣기 ..
온라인 게임..
윈도우 프로..
유경상의 닷..
인크레디빌드
자바스크립..
전자 부품 ..
전화번호로 ..
정명수님 블..
정보보안연..
지니네 - 네..
지니야 홈페..
찬희와 희야
최흥배님 카..
카페 24 - ..
커플이님의 ..
클래스 뷰 ..
통계 정보 ..
통합전자민..
프로젝트 관리
한국 TOC 컨..
한국전산원 ..
해외거주 한..
휘슬러 사용..
230
187
112783
태터툴즈 배너