#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 改为文件的大小就好了.