Windows 内存映射文件的使用

举例:像操作字符串一样地操作一个文件中的内容


bool OperateFileJustLikeToString(const char * pszFileName)
{
 const HANDLE hFile = CreateFile(pszFileName, \
  GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, \
  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 if(hFile == INVALID_HANDLE_VALUE)
  return false;

 DWORD dwLength = GetFileSize(hFile, NULL);
 //创建内存映射对象,内存映射文件的大小 = 文件长度 + (WCHAR)'\0'
 //因为我们要在文件的末尾加上一个字符串的结束符'\0', 当我们将这个文件映射到内存中时,我们就可以像操作字符串一样地来操作文件了
 const HANDLE hFileMap = CreateFileMapping(
  hFile, NULL, PAGE_READWRITE, 0,
  dwLength + sizeof(WCHAR),
  NULL);
 
 char * pFile = (char *)MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0, 0, 0);
 pFile[dwLength / sizeof(char)] = '\0';
 
 //现在对文件的操作就变成了对一字符串pFile的操作了,所有的字符串函数都能
 //对pFile这个字符串进行操作, 而操作的结果则会被保存到文件中去(但是并不
是改变pFile
 //中的内容后会立刻写到文件中去,但是在调用UnmapViewOfFile()后,保证先前对pFile的修改全部保存到文件中了)
 //...........
 //statement();
 //............

 UnmapViewOfFile(pFile);
 CloseHandle(hFileMap);

 //我们改变了文件的长度,因此要重新设置文件的结束符以删除留在文件尾部的多余内容(比如删除我们先前加到文件末尾的'\0'字符)
 SetFilePointer(hFile,dwLength , NULL, FILE_BEGIN);
 SetEndOfFile(hFile);  //设定当前文件指针所在处为文件结束处.该处后面的内容将被删除
 CloseHandle(hFile);
 return true;
}

posted on 2006-10-31 11:35 永遇乐 阅读(2931) 评论(0)  编辑 收藏 引用 所属分类: Windows MFC


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2006年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(6)

随笔分类

推荐Blog

友情链接

搜索

最新评论

阅读排行榜