티스토리 뷰
파일 읽기는 자주 사용하실 것인데..
CFile::Read를 사용하여도 되지만 속도 문제때문에
메모리 맵 파일을 이용한 파일 읽기 방법을 올려 들립니다..
BOOL OpenFiles(LPCSTR lpszPathName)
{
DWORD dwFileSize;
HANDLE hFile, hFileMap;
LPVOID lpvFile;
hFile = ::CreateFile(lpszPathName, GENERIC_READ , 0, NULL
OPEN_EXISTING, FILE_ATTRIBUTTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE) {
//여기에서 에러 메세지 처리..
}
dwFileSize = ::GetFileSize(hFile, NULL);
hFileMap = CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0,
dwFileSize, NULL);
if(hFileMap == NULL) {
CloseHandle(hFile);
//여기에서 에러 메세지 처리..
}
lpFile = MapViewOfFile(hFileMap, FILE_MAP_COPY, 0,0,0);
if(lpFile == NULL) {
CloseHandle(hFile);
CloseHandle(hFileMap);
//여기에서 에러 처리
}
}
이렇게 하면.. 대용량의 파일을 빠르게 읽을 수 있습니다..
위의 예제는 메모리 맵파일을 이용한건데 좀 복잡해 보이나요 ??
이번에는 메모리 맵파일을 이용한 방법외에 간단한 방법이 있어서 올려봅니다.
그냥 도스용 시절에 사용했던 fread함수를 사용한 것입니다.
물론 fread대신 다른 파일 읽기 함수를 사용해도 됩니다.
char *ReadFile( char *FileName )
{
FILE *fp;
int FileSize;
char *buffer;
try {
fp = fopen( FileName, "rb" );
if( !fp ) throw "File Not Found!";
FileSize = filelength( fileno(fp) );
buffer = new char [FileSize+1];
fread( buffer, FileSize, 1, fp );
*(buffer + FileSize) = 0;
fclose( fp );
return buffer;
}
catch( char *msg ) {
printf( msg );
return NULL;
}
}
위의 try ~ catch구분은 중요한것은 아니고요,
대부분의 예외처리를 위한 루틴입니다.
CFile::Read를 사용하여도 되지만 속도 문제때문에
메모리 맵 파일을 이용한 파일 읽기 방법을 올려 들립니다..
BOOL OpenFiles(LPCSTR lpszPathName)
{
DWORD dwFileSize;
HANDLE hFile, hFileMap;
LPVOID lpvFile;
hFile = ::CreateFile(lpszPathName, GENERIC_READ , 0, NULL
OPEN_EXISTING, FILE_ATTRIBUTTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE) {
//여기에서 에러 메세지 처리..
}
dwFileSize = ::GetFileSize(hFile, NULL);
hFileMap = CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0,
dwFileSize, NULL);
if(hFileMap == NULL) {
CloseHandle(hFile);
//여기에서 에러 메세지 처리..
}
lpFile = MapViewOfFile(hFileMap, FILE_MAP_COPY, 0,0,0);
if(lpFile == NULL) {
CloseHandle(hFile);
CloseHandle(hFileMap);
//여기에서 에러 처리
}
}
이렇게 하면.. 대용량의 파일을 빠르게 읽을 수 있습니다..
위의 예제는 메모리 맵파일을 이용한건데 좀 복잡해 보이나요 ??
이번에는 메모리 맵파일을 이용한 방법외에 간단한 방법이 있어서 올려봅니다.
그냥 도스용 시절에 사용했던 fread함수를 사용한 것입니다.
물론 fread대신 다른 파일 읽기 함수를 사용해도 됩니다.
char *ReadFile( char *FileName )
{
FILE *fp;
int FileSize;
char *buffer;
try {
fp = fopen( FileName, "rb" );
if( !fp ) throw "File Not Found!";
FileSize = filelength( fileno(fp) );
buffer = new char [FileSize+1];
fread( buffer, FileSize, 1, fp );
*(buffer + FileSize) = 0;
fclose( fp );
return buffer;
}
catch( char *msg ) {
printf( msg );
return NULL;
}
}
위의 try ~ catch구분은 중요한것은 아니고요,
대부분의 예외처리를 위한 루틴입니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- hp-ux
- 책
- 후기
- 회식
- 일기
- 박영창
- 네트워크
- 레포트
- HPUX
- 시간표
- 리눅스
- 프로그래밍
- World Of Warcraft
- 삼성 소프트웨어 멤버십
- 영화
- 실전! 업무에 바로 쓰는 SQL 튜닝
- 오픈 소스 SW와 전략적 활용
- SSM
- Japanimation
- 캐논
- 모임
- 애니메이션
- wow
- oracle
- 과제물
- 와우
- 오라클
- 실습으로 배우는 Unix System Admin (HPUX)
- SQL 튜닝
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함