您的位置:逆风者 VC++ 正文
 添加时间:2008-07-13 原文发表:2008-07-13 人气:73 来源:vckbase.net

本文章共10818字,分7页,当前第1页,快速翻页:
 

四川师范大学 tacher

下载源代码

本文介绍利用内存映射文件修改大文件:在大文件内存前加入一段数据,若要使用内存映射文件,必须执行下列操作步骤:

逆风编程精品
  1. 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件;
  2. 创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件;
  3. 让系统将文件映射对象的全部或一部分映射到你的进程地址空间中;

当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除:

  1. 告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像;
  2. 关闭文件映射内核对象;
  3. 关闭文件内核对象;

  下面将用一个实例详细介绍这些操作步骤,(本实例的目的就是将一个文件A其内容前面加入一些内容存入文件B,我想大家在程序开发当中会遇到这种情况的)。

一、我们打开关于A文件内核对象,并创建一个关于B文件的内核对象

若要创建或打开一个文件内核对象,总是要调用CreateFile函数:

HANDLE CreateFile(
PCSTR pszFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
PSECURITY_ATTRIBUTES psa,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);

CreateFile函数拥有好几个参数,这里只重点介绍前3个参数,即pszFileName,dwDesiredAccess和dwShareMode。

你可能会猜到,第一个参数pszFileName用于指明要创建或打开的文件的名字(包括一个选项路径),第二个参数dwDesiredAccess用于设定如何访问该文件的内容,可以设定下表所列的4个值中的一个。

含义
0 不能读取或写入文件的内容,当只想获得文件的属性时,请设定0
GENERIC_READ 可以从文件中读取数据
GENERIC_WRITE 可以将数据写入文件
GENERIC_READ|GENERIC_WRITE 可以从文件中读取数据,也可以将数据写入文件

 

 

  当创建或打开一个文件,将它作为一个内存映射文件来使用时,请选定最有意义的一个或多个访问标志,以说明你打算如何访问文件的数据,对内存映射文件来说,必须打开用于只读访问或读写访问的文件,因此,可以分别设定GENERIC_READ或GENERIC_READ|GENERIC_WRITE,

第三个参数dwShareMode告诉系统你想如何共享该文件,可以为dwShareMode设定下表所列的4个值之一:
 
含义
0 打开文件的任何尝试均将失败
FILE_SHARE_READ 使用GENERIC_WRITE打开文件的其他尝试将会失败
FILE_SHARE_WRITE 使用GENERIC_READ打开文件的其他尝试将会失败
FILE_SHARE_READFILE_SHARE_WRITE 打开文件的其他尝试将会取得成功

如果CreateFile函数成功地创建或打开指定的文件,便返回一个文件内核对象的句柄,否则返回INVALID_HANDLE_VALUE,

注意能够返回句柄的大多数Windows函数如果运行失败,那么就会返回NULL,但是,CreateFile函数将返回INVALID_HANDLE_VALUE,它定义为((HANDLE)-1),

HANDLEhFile=CreateFile(".\\first.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL);
HANDLEhmyfile=CreateFile("E:\\my.txt",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

二、我们要分别创建两个文件映射内核对象
 

本文章更多内容1 - 2 - 3 - 4 - 5 - 6 - 7 - 下一页>>
相关文章

从printf谈可变参数函数的实现
通用 Thunk
VC6绘制3D饼状图 - 完美版
自定义控件—特效列表控件
直接调用类成员函数地址
Thunk 技术的一个改进
一个工业控制管道流动控件的实现
在C++中实现C#的delegate机制
强制编译时约束
VC6绘制3D饼状图
一个简单的外挂制作
动态加载CBitmapButton的四副状态图
一个支持各种交叉等形状工业控制管道控件的
利用模板元编程实现解循环优化
单件模式之土著人的可乐瓶
通过ODBC API实现对数据库的访问
七段数码显示的数字时钟
仿QQ悬挂窗口的实现

相关评论


本文章所属分类:首页 VC++

  热门关键字: