我正在用C和Visual Studio編寫Windows程序。我必須映射一個文件,而不是從它的第750個字節訪問它。我試圖內存映射文件偏移量低
pFile = (char *) MapViewOfFile(hMMap,FILE_MAP_ALL_ACCESS,0,(DWORD) 750,0)
打開的文件與這一點,但它會返回錯誤1132
ERROR_MAPPED_ALIGNMENT 1132(0x46C) 的基址或指定沒有正確對齊文件偏移。
如何解決這個問題?
我正在用C和Visual Studio編寫Windows程序。我必須映射一個文件,而不是從它的第750個字節訪問它。我試圖內存映射文件偏移量低
pFile = (char *) MapViewOfFile(hMMap,FILE_MAP_ALL_ACCESS,0,(DWORD) 750,0)
打開的文件與這一點,但它會返回錯誤1132
ERROR_MAPPED_ALIGNMENT 1132(0x46C) 的基址或指定沒有正確對齊文件偏移。
如何解決這個問題?
的MapViewOfFile的文檔是很清楚,偏移量必須是分配粒度的倍數(這通常是64KB我相信,但叫GetSystemInfo
得到真正的實際值作爲文檔狀態)。
如此以來,750比分配粒度小,你必須從0文件映射如果你真的需要你的指針字節750個,那麼就遞增指針
pFile = (char *) MapViewOfFile(hMMap,FILE_MAP_ALL_ACCESS,0,(DWORD) 0,0);
char* pBuffer = pFile + 750;
你需要第二個緩衝區,因爲你將不得不通過pFile到UnmapViewOfFile
我認爲你必須從第750字節訪問文件,而不是你必須從這個偏移量創建地圖。正如你發現的那樣,你不能這樣做,因爲你傳遞給MapViewOfFile
的偏移量必須是系統「分配粒度」的一個倍數,你可以從GetSystemInfo
得到,但是至少有4kbytes,IIRC。
您可以創建一個文件的視圖,該視圖從字節0開始,並且只從超出返回地址的750個字節讀取。
該文件中的偏移量必須是4K的倍數(所以750不工作)
你可能會更好,從0映射文件,只是抵銷映射地址750。
你是否還意味着調用'MapViewOfFile()'調用750? – 2011-12-21 00:23:34
@GregHewgill,當然了。謝謝 – shf301 2011-12-21 00:26:11