利用内存文件映射拷贝大文件数据
来源:互联网 发布:淘宝店限制发布宝贝 编辑:程序博客网 时间:2024/06/05 17:18
目前碰到一个需求,需要将A文件中从aOffset处复制 lSize 长度的数据到B长文件的bOffset,由于lSize是个很大的值,假如利用常规 读取->写入 循环模式由于频繁进行IO操作势必影响性能,想到可以利用文件内存映射来完成, 代码实现之(考虑到SDK读写文件需要写很长的代码,所以借助MFC中的CFile来实现)
void CopyFileMap(LPCTSTR lpSrc, DWORD offsetSrc, LPCTSTR lpDest, DWORD offsetDest, DWORD size){CFile f(lpSrc, CFile::modeReadWrite|CFile::shareDenyNone);HANDLE hFile = (HANDLE)(HFILE)f;HANDLE hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READWRITE, 0, 0, NULL);PBYTE pbFile = (PBYTE)MapViewOfFile(hFileMapping,FILE_MAP_ALL_ACCESS,0, 0, f.GetLength());f.Close();CFile f2(lpDest, CFile::modeReadWrite|CFile::shareDenyNone);HANDLE hFile2 = (HANDLE)(HFILE)f2;DWORD dwDestFileSize = offsetDest + size;HANDLE hFileMapping2 = CreateFileMapping(hFile2,NULL,PAGE_READWRITE,0,(DWORD)(dwDestFileSize&0xFFFFFFFF),NULL);f2.Close();PBYTE pbFile2 = (PBYTE)MapViewOfFile(hFileMapping2,FILE_MAP_ALL_ACCESS,0, 0, dwDestFileSize);memcpy(pbFile2 + offsetDest, pbFile + offsetSrc, size);UnmapViewOfFile(pbFile);UnmapViewOfFile(pbFile2);CloseHandle(hFileMapping);CloseHandle(hFileMapping2);}
- 利用内存文件映射拷贝大文件数据
- 利用内存映射文件处理大文件
- c++ 利用内存映射读取大文件
- [NIO]利用内存映射文件以及普通通道进行文件拷贝效率分析
- 利用内存映射处理文件
- 内存映射修改大文件
- 内存映射修改大文件
- 内存映射修改大文件
- 内存映射修改大文件
- 内存映射修改大文件
- 大文件内存映射问题
- 利用内存映射文件在两个进程间共享数据
- 利用内存映射文件在进程间共享数据
- 利用内存映射文件在进程间共享数据
- 使用内存映射文件处理大文件
- 使用内存映射文件读写大文件
- 内存映射文件----大文件处理----摘抄
- 内存映射文件处理大文件
- 20120320 oracle数据库链路的创建和使用
- cx_oracle执行存储过程中输入blob和日期参数的流程
- JAVA重点编程
- ubuntu安装jdk全过程
- python 连接oracle
- 利用内存文件映射拷贝大文件数据
- 三重form提交
- 献给所有的程序员女友
- Python ini文件操作
- Android 源码下载 (ubuntu)
- 算法之左旋转字符(二)
- first blood!
- 深入观察不理性的一面
- windows下jdk环境变量的配置