작업을 하다보니 4GB 크기가 넘는 파일을 다루어야 할 일이 생겼네요.
윈도우즈 커널에 _hread, _hwrite 등의 숨겨진 API가 제공되지만..
이런거 찾아다가 처리하기가 여간 귀찬아서.. ㅎㅎ;

대형 파일을 그냥 fopen, open, OpenFile 등등.. 어떤 API로 처리하든지
그냥 읽고 쓰기는 가능합니다.
(단, 이 방법을 사용하시더라도 fseek, lseek는 불가능합니다.
 파일을 seek해야 할 경우는 처음에 이야기 처럼 kernel에 숨겨진 위의 함수들을
 찾아서 사용하시던지, Visual Studio 2005 이상 버전을 사용하세요.

http://support.microsoft.com/kb/q100513/
위의 주소는 MS의 KB로 Visual Basic에서 대형파일을 어떻게 처리하는지에
대한 내용입니다. 내용을 보시고 VC로 포팅하는건 ~~
)



단지, 크기를 읽을 때 문제가 발생하죠..
Visual Studio 2005 이상 버전에서는 64비트 크기를 지원하는 새로운
API들이 제공되니 그냥 그걸 쓰시면 되고...

저는 몇몇 가지를 빼곤 대부분 Visual Studio 6.0을 사용하는 관계로, 6.0을 사용하시는
분들에게만 해당되는 내용이 될것입니다.

아래는 데브피아에 올라온 원문입니다.

 4.2기가 바이트 이상의 파일을 읽고 싶습니다. [답을 찾았습니다.]  | VC++ 일반 2007-04-09 오전 11:07:43
김태권 (jukyou)  김태권님께 메시지 보내기김태권님을 내 주소록에 추가합니다.김태권님의 개인게시판 가기 번호: 650715   / 평점:  (9.0)  / 읽음:80

안녕하십니까? 이전에 제 우매한 질문에 여러분께서 답변을 해주셔셔 감사드린다는 말씀 전해 드립니다.


저번 주 주말에 답을 찾아서 답을 올립니다.


강태호 (cartarsis) 님께서 답변 주신 내용과 MSDN을 읽어 보고 해결하였습니다.

우선 4.2기가 바이트 이상의 파일을 읽어야하는 상황이 있으신 분들을 위해 글을 남겨 놓습니다.



소스는 아래와 같습니다.


HANDLE hFile;

unsigned long nSizeHigh = 0;

unsigned long nSizeLow = 0;

__int64 nSize = 0;

hFile = CreateFile(szFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

nSizeLow = GetFileSize(hFile, &nSizeHigh);

nSize = nSizeHigh;

nSize <<= 32;

nSize |= nSizeLow;

TRACE("Size : %I64d\n", nSize);


좋은 하루 되세요~~


그럼 이만 줄입니다.

+ Recent posts