2011-12-20 5 views
3

C 및 Visual Studio에서 Windows 프로그램을 작성하고 있습니다. 750 번째 바이트에서 파일에 액세스하는 것보다 파일을 매핑해야합니다. 나는이 함께메모리 맵 파일 오프셋 낮음

pFile = (char *) MapViewOfFile(hMMap,FILE_MAP_ALL_ACCESS,0,(DWORD) 750,0) 

파일 열기를 시도했지만 오류 반환 1132

ERROR_MAPPED_ALIGNMENT 1132 (0x46C) 기본 주소 나이 적절하게 결합되어 있지 않습니다 지정된 파일 오프셋.

어떻게 해결할 수 있습니까?

답변

4

MapViewOfFile의 설명서는 오프셋이 할당 세분성의 배수 여야한다는 것을 분명히 보여줍니다 (일반적으로 문서 크기는 실제 크기로 가져 오려면 GetSystemInfo으로 전화를 걸면됩니다).

그래서 750이 할당 단위보다 작은 때문에 당신은 당신이 정말로 750번째 바이트 포인터를해야 할 경우, 당신이거야 포인터

pFile = (char *) MapViewOfFile(hMMap,FILE_MAP_ALL_ACCESS,0,(DWORD) 0,0); 
char* pBuffer = pFile + 750; 

를 증가, 0에서 파일을 매핑해야합니다 두 번째 버퍼가 필요합니다. pFile을 넘겨야 할 것입니다. UnmapViewOfFile

+0

'MapViewOfFile()'에 대한 호출에서 750을 수정하고 싶습니까? –

+0

@GregHewgill, 확실히 했어. 감사 – shf301

2

이 오프셋에서 맵을 만들어야하는 것이 아니라 750 바이트에서 파일에 액세스해야한다고 가정합니다. 발견 한 것처럼 MapViewOfFile에 전달하는 오프셋은 GetSystemInfo에서 얻을 수 있지만 IIRC는 최소 4kbytes 인 경향이있는 시스템의 "할당 세부 정보"의 배수 여야하기 때문에이 작업을 수행 할 수 없습니다.

바이트 0에서 시작하여 반환 된 주소를 넘어 750 바이트에서 읽는 파일의보기를 만들 수 있습니다. 파일의 오프셋 (offset)

1

당신은 아마 0에서 파일을 매핑하고 단지 매핑 된 주소에서 750을 상쇄 더 나을 것이다 (그래서 750이 작동하지 않습니다) 4K의 배수이어야한다.