使用内存映射文件(windows核心编程指南)

使用内存映射文件,必须执行下列步骤:

1)创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件。

2)创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件。

3)让系统将文件映射对象的全部或一部分映射到你的进程地址空间中。

4)告诉系统从你的进程的地址空间中撤销文件映射内核对象的映像。

5)关闭文件映射内核对象。

6)关闭文件内核对象。

程序实现了文件倒序

#include "stdafx.h"
#include "windows.h"
#include "tchar.h"
#include "string.h"


BOOL FileReverse(PCTSTR pszPathname,BOOL pfisTextUnicode)
{

HANDLE hfile=CreateFile(pszPathname,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
 
 if(hfile == INVALID_HANDLE_VALUE){
  return(FALSE);
 }

 DWORD dwFileSize = GetFileSize(hfile,NULL);//获取文件的大小

 HANDLE hfilemap=CreateFileMapping(hfile,NULL,PAGE_READWRITE,0,dwFileSize + sizeof(WCHAR),NULL);

 if(hfilemap == NULL){
  CloseHandle(hfile);
  return(FALSE);
 }

 PVOID pvFile=MapViewOfFile(hfilemap,FILE_MAP_WRITE,0,0,0);

 if(pvFile == NULL){
  CloseHandle(hfilemap);
  CloseHandle(hfile);
  return(FALSE);
 }

 int iUnicodeTestFlags = -1;
 pfisTextUnicode = IsTextUnicode(pvFile,dwFileSize,&iUnicodeTestFlags);

 if(!pfisTextUnicode){

  PSTR pchANSI=(PSTR)pvFile;
  pchANSI[dwFileSize/sizeof(CHAR)]=0;
  _strrev(pchANSI);
  pchANSI=strchr(pchANSI,'\n');

  while(pchANSI != NULL){
   *pchANSI++ = '\r';
   *pchANSI++ = '\n';
   pchANSI=strchr(pchANSI,'\n');
  }

 }else{

  PWSTR pchUnicode = (PWSTR)pvFile;
  pchUnicode[dwFileSize/sizeof(WCHAR)] = 0;

  if((iUnicodeTestFlags & IS_TEXT_UNICODE_SIGNATURE ) != 0){
   pchUnicode++;
  }
  _wcsrev(pchUnicode);

  pchUnicode = wcschr(pchUnicode,L'\n');

  while(pchUnicode != NULL){
   *pchUnicode++ = L'\r';
   *pchUnicode++ = L'\n';
   pchUnicode=wcschr(pchUnicode,L'\n');
  }
 }

 UnmapViewOfFile(pvFile);
 CloseHandle(hfilemap);
 SetFilePointer(hfile,dwFileSize,NULL,FILE_BEGIN);
 SetEndOfFile(hfile);
 CloseHandle(hfile);
 return(TRUE);
}

 

转载于:https://www.cnblogs.com/fengxinziyang/archive/2009/03/18/1415411.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值