内存映像文件怎么用? 内存映像文件有没有预读机制?怎么通过它在文件指定位置写入? 怎么在文件中分配新空间?(就是写入新内容?) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CRiftGameProDlg::TestCfile(){ // CFileDialog fileDlg(TRUE,_T("*.txt"),_T("*.txt"),NULL,_T("文本文件(*.txt)|*.txt||"),this); //fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST; //fileDlg.m_ofn.lpstrFileTitle = _T("通过内存映射文件读取数据"); if (fileDlg.DoModal() == IDOK) { //创建文件对象 HANDLE hFile = CreateFile(fileDlg.GetPathName(),GENERIC_READ|GENERIC_WRITE,0,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hFile == INVALID_HANDLE_VALUE) { TRACE ("创建文件对象失败,错误代码:%d\r\n",GetLastError()); return; } //创建文件映射对象 HANDLE hFileMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,NULL); if (hFileMap == NULL) { TRACE("创建文件映射对象失败,错误代码:%d\r\n",GetLastError()); return; } //得到系统分配颗粒 SYSTEM_INFO SysInfo; GetSystemInfo(&SysInfo); DWORD dwGran = SysInfo.dwAllocationGranularity; //得到文件尺寸 DWORD dwFileSizeHigh; __int64 qwFileSize = GetFileSize(hFile,&dwFileSizeHigh); qwFileSize |= (((__int64)dwFileSizeHigh)<<32); //关闭文件对象 CloseHandle(hFile); //偏移地址 __int64 qwFileOffset = 0; //块大小 DWORD dwBlockBytes = dwGran; while (qwFileSize >0) { //映射视图 if (qwFileSize<dwGran) dwBlockBytes = (DWORD)(qwFileSize); LPBYTE lpbMapAddress = (LPBYTE)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,(DWORD)(qwFileOffset>>32),(DWORD)(qwFileOffset & 0xFFFFFFFF),dwBlockBytes); if (lpbMapAddress == NULL) { TRACE("映射文件映射失败,错误代码:%d\r\n",GetLastError()); return; } //对映射的视图碱性访问 for (DWORD i = 0; i<dwBlockBytes;i++) { BYTE temp = *(lpbMapAddress+i); } //撤销文件映射 UnmapViewOfFile(lpbMapAddress); //修正参数 qwFileOffset += dwBlockBytes; qwFileSize -= dwBlockBytes; } //关闭文件映射对象句柄 CloseHandle(hFileMap); AfxMessageBox(_T("成功完成对文件的访问")); }}自己看看对你有帮助不,还不行的话看下WINDOWS核心编程第17章(内存映射文件) 有关绘图仪的输出,不是高手不要进 关于组件的包容和聚合,什么时候该使用包容什么时候该使用聚合啊? 关于网络游戏的游戏建模问题 入门请教 大家来评论! 高分求跟踪输出源代码 有关CString类的问题 为何98下 Windows Media Player 不可用? 初学者的初学问题(查找) 有没有真正的大神来解决一下问题 CFile的OPEN函数出错! mfc写文件操作
void CRiftGameProDlg::TestCfile()
{
//
CFileDialog fileDlg(TRUE,_T("*.txt"),_T("*.txt"),NULL,_T("文本文件(*.txt)|*.txt||"),this);
//fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST;
//fileDlg.m_ofn.lpstrFileTitle = _T("通过内存映射文件读取数据");
if (fileDlg.DoModal() == IDOK)
{
//创建文件对象
HANDLE hFile = CreateFile(fileDlg.GetPathName(),GENERIC_READ|GENERIC_WRITE,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
TRACE ("创建文件对象失败,错误代码:%d\r\n",GetLastError());
return;
}
//创建文件映射对象
HANDLE hFileMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,NULL);
if (hFileMap == NULL)
{
TRACE("创建文件映射对象失败,错误代码:%d\r\n",GetLastError());
return;
}
//得到系统分配颗粒
SYSTEM_INFO SysInfo;
GetSystemInfo(&SysInfo);
DWORD dwGran = SysInfo.dwAllocationGranularity;
//得到文件尺寸
DWORD dwFileSizeHigh;
__int64 qwFileSize = GetFileSize(hFile,&dwFileSizeHigh);
qwFileSize |= (((__int64)dwFileSizeHigh)<<32);
//关闭文件对象
CloseHandle(hFile);
//偏移地址
__int64 qwFileOffset = 0;
//块大小
DWORD dwBlockBytes = dwGran;
while (qwFileSize >0)
{
//映射视图
if (qwFileSize<dwGran)
dwBlockBytes = (DWORD)(qwFileSize);
LPBYTE lpbMapAddress = (LPBYTE)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,(DWORD)(qwFileOffset>>32),(DWORD)(qwFileOffset & 0xFFFFFFFF),dwBlockBytes);
if (lpbMapAddress == NULL)
{
TRACE("映射文件映射失败,错误代码:%d\r\n",GetLastError());
return;
}
//对映射的视图碱性访问
for (DWORD i = 0; i<dwBlockBytes;i++)
{
BYTE temp = *(lpbMapAddress+i);
} //撤销文件映射
UnmapViewOfFile(lpbMapAddress);
//修正参数
qwFileOffset += dwBlockBytes;
qwFileSize -= dwBlockBytes;
}
//关闭文件映射对象句柄
CloseHandle(hFileMap);
AfxMessageBox(_T("成功完成对文件的访问"));
}
}自己看看对你有帮助不,还不行的话看下WINDOWS核心编程第17章(内存映射文件)