http://mh-nexus.de/en/downloads.php?product=HxD
hxd查看4G以上hex文件快的很
void CMapBigFIleDlg::OnOK()
{
// TODO: Add extra validation here
//CDialog::OnOK();
/* CFileDialog fileDlg(TRUE, "*.txt", "*.txt", NULL, "文本文件 (*.txt)|*.txt||", this);
fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST;
fileDlg.m_ofn.lpstrTitle = "通过内存映射文件读取数据";
if (fileDlg.DoModal() == IDOK)
{
*/ // 创建文件对象
char *filepath = "E:/Program Files/天狼星/屏幕录像专家 共享版 V7.5/ls/录像20.avi" ;
HANDLE hFile = CreateFile(filepath, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //fileDlg.GetPathName()
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 = 1000 * dwGran; //1000*64k=64M
if (qwFileSize < 1000 * dwGran)
{
dwBlockBytes = (DWORD)qwFileSize;
}
int count=0;
char temp[20];
while (qwFileSize > 0) //while (qwFileOffset > 0)
{
// 映射视图
if (qwFileSize < 1000 * dwGran) //last time
{
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);
// 撤消文件映像
*/
if (qwFileSize < 1000 * dwGran) //last time
{
//dwBlockBytes = (DWORD)qwFileSize;
memcpy(temp, lpbMapAddress+dwBlockBytes-21, sizeof(temp) );
}
UnmapViewOfFile(lpbMapAddress);
// 修正参数
qwFileOffset += dwBlockBytes;
qwFileSize -= dwBlockBytes;
count++;
TRACE("count:%d\n",count);
}
// 关闭文件映射对象句柄
TRACE("count:%d\n",count);
for(int i=0;i<20;i++)
{
TRACE("%02x ", (unsigned char)temp[i] );
}
CloseHandle(hFileMap);
AfxMessageBox("成功完成对文件的访问");
//}
}