2011-12-20 141 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的文檔是很清楚,偏移量必須是分配粒度的倍數(這通常是64KB我相信,但叫GetSystemInfo得到真正的實際值作爲文檔狀態)。

如此以來,750比分配粒度小,你必須從0文件映射如果你真的需要你的指針字節750個,那麼就遞增指針

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

你需要第二個緩衝區,因爲你將不得不通過pFile到UnmapViewOfFile

+0

你是否還意味着調用'MapViewOfFile()'調用750? – 2011-12-21 00:23:34

+0

@GregHewgill,當然了。謝謝 – shf301 2011-12-21 00:26:11

2

我認爲你必須從第750字節訪問文件,而不是你必須從這個偏移量創建地圖。正如你發現的那樣,你不能這樣做,因爲你傳遞給MapViewOfFile的偏移量必須是系統「分配粒度」的一個倍數,你可以從GetSystemInfo得到,但是至少有4kbytes,IIRC。

您可以創建一個文件的視圖,該視圖從字節0開始,並且只從超出返回地址的750個字節讀取。

1

該文件中的偏移量必須是4K的倍數(所以750不工作)

你可能會更好,從0映射文件,只是抵銷映射地址750。