使用檔案對映檢視讀取檔案
阿新 • • 發佈:2018-12-03
通常情況的檔案操作使用open、read、write,除了這種方式,還可以使用檔案對映檢視。
讀取檔案的前10個位元組:
#include <stdio.h> #include <Windows.h> int main() { HANDLE l_hFileHandle = CreateFileA("C:\\1.pdf", GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); HANDLE l_hFileMapping = CreateFileMappingA(l_hFileHandle, NULL, PAGE_EXECUTE_READ, 0, 0, NULL); /* 使用32位程式在64位電腦上獲取檔案分配粒度 其他的使用GetSystemInfo() */ SYSTEM_INFO l_SystemInfo; GetNativeSystemInfo(&l_SystemInfo); printf("%d\n",l_SystemInfo.dwAllocationGranularity); /* 檔案偏移高位、低位結合必須是檔案分配粒度(64K)的整數倍,實際測試均0也可以 讀取檔案的前10個位元組到記憶體中,並返回起始地址值到l_pVoid變數中 */ LPVOID l_pVoid = MapViewOfFile(l_hFileMapping, FILE_MAP_READ, 0, 0, 10); DWORD l_dwError = GetLastError(); // MapViewOfFile的檔案偏移高位、地位結合必須是64K的整數倍,否則錯誤程式碼是1132 UnmapViewOfFile(l_pVoid); CloseHandle(l_hFileMapping); CloseHandle(l_hFileHandle); return 0; }
上面例子是讀取檔案內容,如果要更改檔案內容需要更改CreateFileA()的標誌為GENERIC_ALL、CreateFileMappingA()標誌為PAGE_READWRITE、MapViewOfFile()標誌為FILE_MAP_ALL_ACCESS,就是都修改為可寫。
在UnmapViewOfFile( )、CloseHandle()之後,檢視磁碟上的檔案,已經發生了變化。