728x90
파일 읽기는 자주 사용하실 것인데..
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;
- }
- }
출처 : http://webdizen.new21.net
'프로그램언어 > C#' 카테고리의 다른 글
동일 프로그램 한번만 실행하기 (0) | 2009.06.24 |
---|---|
Class Library Description (0) | 2009.04.24 |
닷넷 개발시 사용할 네이밍 룰 (0) | 2009.02.06 |
문자열에서 HTML 태그 지우는 방법 - C# (1) | 2009.02.06 |
IHTMLElement2를 이용한 모든 HTML 태그 얻기 (0) | 2009.02.06 |