日历

2008 11.18 Tue
      1
2345678
9101112131415
16171819202122
23242526272829
30      
«» 2008 - 11 «»

日志分类

文章搜索

日志文章

2008年05月17日 22:38:08

通用文件操作类的设计

首发:www.baiag.com
Windows环境下读写文件一般有下列有下面几种方式:C语言的文件操作函数,如fopen函数等,C++的I/O流库,Win32 API的文件操作函数,如CreateFile()、WriteFile()、ReadFile(),百奥谷MFC的文件操作类,如CFile和CStdioFile等等。但是在大型的数据文件,上面的文件处理方法是不太适合的。对于大文件的操作一般是以内存映射文件来加以处理的。为此本人以读取著名的遥感图像文件格式pix文件来说明如何应用内存文件映射来设计一个通用的文件操作类。
一.内存文件映射的基本原理首先要通过CreateFile()函数来创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。在用CreateFile()将文件映像在物理存储器的位置通告给操作系统后,只指定了映像文件的路径,映像的长度还没有指定。为了指定文件映射对象需要多大的物理存储空间还需要通过CreateFileMapping()函数来创建一个文件映射内核对象以告诉系统文件的尺寸以及访问文件的方式。在创建了文件映射对象后,还必须为文件数据保留一个地址空间区域,百奥谷并把文件数据作为映射到该区域的物理存储器进行提交。由MapViewOfFile()函数负责通过系统的管理而将文件映射对象的全部或部分映射到进程地址空间。此时,对内存映射文件的使用和处理同通常加载到内存中的文件数据的处理方式基本一样,在完成了对内存映射文件的使用时,百奥谷还要通过一系列的操作完成对其的清除和使用过资源的释放。这部分相对比较简单,可以通过UnmapViewOfFile()完成从进程的地址空间撤消文件数据的映像、通过CloseHandle()关闭前面创建的文件映射对象和文件对象。 二.应用内存文件映射的基本思路由上可知,内存文件映射实际上开辟一段内存空间和文件磁盘空间进行映射,因此操作文件的基本思路就是首先获取这段内存的基地址,然后获取信息结构的偏移量,比如你要获取文件头的信息,实际上就是先取得基地址,然后那个偏移量就是文件头的大小,这个和移动文件指针和文件指针的偏移量原理上是差不多的。

Tags: 互联网  

类别: 无分类 |  评论(0) |  浏览(312) |  收藏
发表评论
看不清楚,换一张