#include <windows.h> #include <tchar.h> int main(int argc, char* argv[]) { HANDLE hFile = CreateFile("c:\\a.txt", //使用相对路径 GENERIC_READ|GENERIC_WRITE, //以读写方式打开文件 FILE_SHARE_READ | FILE_SHARE_WRITE, //以共享读的方式打开 NULL, //不设置安全属性 CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, //不设置文件属性 NULL //不设置模板文件句柄 ); if (hFile == INVALID_HANDLE_VALUE) { printf(_T("打开文件失败")); return -1; } // 创建内存映射对象 HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, strlen("Hello Ternsoft.com!"), NULL); //映射内存大小与文件大小相同 if (hMap == NULL) { printf(_T("创建内存映射文件失败,%d\n"),GetLastError()); return -2; } // 映射整个"c:\\a.txt"文件到内存,返回这块内存的首地址 LPVOID lpBase = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0); if (hMap == NULL) { printf(_T("映射文件到内存失败")); return -3; } //此时lpBase指针所指向的内存就是c:\\a.txt文件中的内容。 //修改这块内存中的内容就等于修改文件内容。 strcpy((char *)lpBase, "Hello MemoryCat.com!"); //见文件内容修改为"Hello MemoryCat.com!" printf("%s\n",(char *)lpBase); //打印文件内容:这里是"Hello MemoryCat.com!" UnmapViewOfFile(lpBase); //撤销映射 CloseHandle(hMap); //关闭内存映射文件对象句柄 CloseHandle(hFile); //关闭文件句柄 return 0; }
如果 GetLastError 返回 1006 (文件所在的卷已被外部更改,因此打开的文件不再有效。)
DWORD dwMaximumSizeHigh, // high-order 32 bits of object size
DWORD dwMaximumSizeLow, // low-order 32 bits of object size
把 0,0 改为文件的大小就好了.
如果 GetLastError 返回 1006 (文件所在的卷已被外部更改,因此打开的文件不再有效。)
DWORD dwMaximumSizeHigh, // high-order 32 bits of object size
DWORD dwMaximumSizeLow, // low-order 32 bits of object size
把 0,0 改为文件的大小就好了.