WriteFile()为什么总是失败?异常代码6,无效的句柄
WriteFile()为什么总是失败?错误代码6,无效的句柄
DWORD dw=10;
HANDLE hh=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,1024,NULL);//这个句柄不是NULL
if(hh==NULL)MessageBox(0, "创建映射文件失败! ",0,0); //
if(!WriteFile(hh, "asdfasdfasdf ",10,&dwLen,0))
{
dwLen=GetLastError(); //这里总是返回6,说句柄无效
char cc[100];
sprintf(cc, "%d ",dwLen);
MessageBox(0,cc, "写入失败! ",0);
}
CloseHandle(hh);
请问这是为什么?
------解决方案--------------------
CreateFileMapping是映射,直接CreateFile
------解决方案--------------------
楼上说的对
你这个是映射 不能WriteFile的
------解决方案--------------------
内存映射文件不是这么使用的,贴一段代码让你看看:
LPSTR lpData;
hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,
PAGE_READWRITE,0,BUFFER_SIZE, "MYSHARE ");
if(hMapping==NULL)
{
AfxMessageBox( "CreateFileMapping() failed. ");
return;
}
// 将文件的视图映射到一个进程的地址空间上,返回LPVOID类型的内存指针.
lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
if(lpData==NULL)
{
AfxMessageBox( "MapViewOfFile() failed. ");
return;
}
// 给这段映像内存写数据.
sprintf(lpData,m_strFileMap);
// 释放映像内存.
UnmapViewOfFile(lpData);
创建好内存映射文件后,必须调用MapViewOfFile讲文件映射到某个地址上,如果创建是指定了文件句柄就要映射到文件地址,没有的话就要映射到某个内存地址。
DWORD dw=10;
HANDLE hh=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,1024,NULL);//这个句柄不是NULL
if(hh==NULL)MessageBox(0, "创建映射文件失败! ",0,0); //
if(!WriteFile(hh, "asdfasdfasdf ",10,&dwLen,0))
{
dwLen=GetLastError(); //这里总是返回6,说句柄无效
char cc[100];
sprintf(cc, "%d ",dwLen);
MessageBox(0,cc, "写入失败! ",0);
}
CloseHandle(hh);
请问这是为什么?
------解决方案--------------------
CreateFileMapping是映射,直接CreateFile
------解决方案--------------------
楼上说的对
你这个是映射 不能WriteFile的
------解决方案--------------------
内存映射文件不是这么使用的,贴一段代码让你看看:
LPSTR lpData;
hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,
PAGE_READWRITE,0,BUFFER_SIZE, "MYSHARE ");
if(hMapping==NULL)
{
AfxMessageBox( "CreateFileMapping() failed. ");
return;
}
// 将文件的视图映射到一个进程的地址空间上,返回LPVOID类型的内存指针.
lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
if(lpData==NULL)
{
AfxMessageBox( "MapViewOfFile() failed. ");
return;
}
// 给这段映像内存写数据.
sprintf(lpData,m_strFileMap);
// 释放映像内存.
UnmapViewOfFile(lpData);
创建好内存映射文件后,必须调用MapViewOfFile讲文件映射到某个地址上,如果创建是指定了文件句柄就要映射到文件地址,没有的话就要映射到某个内存地址。