首页> 中国专利> 应用程序中存取文件数据的方法

应用程序中存取文件数据的方法

摘要

一种应用程序中存取文件数据的方法,首先在内存中创建一储存有文件数据修改量的记录,根据该修改记录,将从该文件中读取的数据修改为当前数据,然后将该当前数据进行程序处理以生成结果数据,将该结果数据储存于该内存记录以生成一新的修改记录,最后根据该修改记录对文件内容进行更新并储存,本发明使用内存记录的方式来储存文件的改变量,从而大大减少了文件处理所需要的时间。

著录项

  • 公开/公告号CN1607498A

    专利类型发明专利

  • 公开/公告日2005-04-20

    原文格式PDF

  • 申请/专利权人 英业达股份有限公司;

    申请/专利号CN200310100686.3

  • 发明设计人 刘文涵;宋建福;蒋炜;

    申请日2003-10-13

  • 分类号G06F9/318;

  • 代理机构隆天国际知识产权代理有限公司;

  • 代理人潘培坤

  • 地址 台湾省台北市

  • 入库时间 2023-12-17 16:00:00

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2011-12-21

    未缴年费专利权终止 IPC(主分类):G06F9/318 授权公告日:20070110 终止日期:20101013 申请日:20031013

    专利权的终止

  • 2007-01-10

    授权

    授权

  • 2005-06-22

    实质审查的生效

    实质审查的生效

  • 2005-04-20

    公开

    公开

说明书

技术领域

本发明涉及一种对文件中的数据的存取方法,特别是涉及一种在应用程序中对比特数较大的文件的存取方法。

背景技术

文件处理是计算机应用中最常见的需求,也是大量应用程序软件中频繁需要处理的事务。由于一些应用程序运行时,需要经常的对同一个文件中的不同部分的数据反复的读取、计算,并将返回结果存入该文件中,以备下次读取之用,因此,文件处理的时间决定了应用程序的运行速度,而且,文件的比特数越大,所需要的处理时间就越长。

在已知技术中,读写一个文件的过程通常是要先打开文件,取得文件句柄(Handle),然后将指针定位(Seek)至要读入数据的位置(设该点为Position1),然后读取长度为lenght1的相关数据,将该数据进行程序化处理得出长度为lenght2的结果数据,然后创建一临时文件(~file),将文件中从文件头开始至position1的数据依次写入该临时文件中,再将结果数据写入position1,之后,再将文件中从position1+length1开始至文件尾的数据追加入临时文件的尾部,最后删除源文件(file),将临时文件(~file)更名为file。

对文件的读写之所以需要这样进行是因为要处理的文件比特数很大,不能一次性全部读入内存处理,而且,需要新写入的数据在文件的中间部位,而文件的存储是连续的,所以不能直接插入新数据。

然而,目前使用的文件处理方式会使文件中插入/删除数据的操作需要较长的处理时间。文件所需的处理时间为:(原文件长度+数据变化长度)×处理单位字节所需时间×对文件内容修改的次数。由此可见,文件越长,需要的处理时间也越长,修改次数越频繁,其保存数据所需要的时间也会成倍的增加。

发明内容

本发明为解决上述问题而提供一种应用程序中存取文件数据的方法,其使用内存记录的方式来储存程序处理过程中对文件的改变量,而使文件内容有变化后不必每次都进行存档操作。

本发明提供一种应用程序中存取文件数据的方法,首先在内存中创建储存有文件数据修改量的记录,根据该修改记录,将从该文件中读取的数据修改为当前数据,然后将该当前数据进行程序化处理以生成结果数据,将该结果数据储存于该内存记录以生成新的修改记录,最后根据该修改记录对文件内容进行更新并储存。

本发明由于使用了内存记录的方式来储存每次程序化处理对文件的改变量,因此可以在对文件的全部操作结束之前不进行存盘操作,而根据内存记录修改每次读出的数据,从而保证了当前数据的正确性,也因此大大减少了文件处理所需要的时间,本发明对文件处理所需的时间为:(源文件长度+内存记录长度)×处理单位比特所需的时间。

附图说明

图1为本发明的应用程序中存取文件数据的方法流程图;

图2为本发明所提供的根据修改记录将从文件中读取的数据修改为当前数据的步骤流程图;

图3为本发明所提供的根据修改记录对文件内容进行更新并储存的步骤流程图;

图4为本发明所提供的源文件数据实施例示意图;及

图5A-图5D为根据本发明对文件数据内容进行储存的实施例示意图。

具体实施方式

本发明提供一种应用程序中存取文件数据的方法,其通过在内存中记录文件数据修改量的方式以提高程序运行中大文件的写入效率,如图1所示,该方法包括:在内存中创建储存有文件数据修改量的记录(步骤101);根据该修改记录,将从该文件中读取的数据修改为当前数据(步骤102);将该当前数据进行程序化处理以生成结果数据(步骤103);将该结果数据储存于该内存记录以生成新的修改记录(步骤104);根据该修改记录对文件内容进行更新并储存(步骤105)。

其中该修改记录包括数据起始位置、数据原始长度、数据结果长度、数据指针以及数据内容的记录。

其中该根据修改记录将从文件中读取的数据修改为当前数据的步骤,如图2所示,还包括如下步骤:打开文件取得文件句柄(Handle)(步骤201);将文件指针定位(Seek)至要读入数据的位置(步骤202);读取一段数据,并与修改记录相参照(步骤203);用修改记录中相同位置的数据取代读入的数据(步骤204)。

当对源文件的所有相关操作全部完成后,或在应用程序退出时,或使用者强制要求保存文件时,才根据修改记录对文件内容进行更新并储存,如图3所示,包括如下步骤:创建一临时文件(步骤301);按照对该文件的修改位置对该修改记录进行排序(步骤302);将没有修改的数据与修改的数据依序存入该临时文件中(步骤303);用该临时文件取代该源文件(步骤304)。

用临时文件取代源文件的步骤,可以先删除该源文件,再将该临时文件更名为该源文件即可。

下面以具体的数据实例来说明本发明的处理过程,假设要存取的文件名为filename,出于篇幅的考虑,在这里仅对该文件的前若干字节进行操作。如图4所示,即为该文件的数据内容(以十六进制表示)。

首先使用文件操作函数(如fopen)打开名为filename的文件,与此同时要在存储器中创建文件修改的记录列表list,然后使用文件操作函数(如fseek)对要读取的数据进行定位,假设要从0x0012<postion1>的位置开始读取数据,使用文件操作函数(如fread)从中读出所需的数据,假设要读出6个字节<length1>的数据。那么此时读取的数据为[6F 72 64 3A32 30],由于此时文件修改的记录列表list为空,因此所读出的数据保持不变。

然后应用程序对读出的数据进行处理。当从文件中读出数据后,应用程序就要根据需要对这些数据进行处理,经过处理后的数据不论在内容上还是在字节大小上都有可能与原来的数据不同。假设经过处理后数据的长度为7个字节<length2>、数据内容改变为[70 73 65 3B 33 31 F2]。此时,根据应用程序的要求需将处理后的数据储存在文件中,那么,就需要在内存中创建一个定义如下的结构体data1:

struct FileData{

    unsigned long ulPosition;数据起始位置

    unsigned long ulLength;数据原始长度

    unsigned long ulSize;数据目前长度

    char*pData;数据指针}

其中:

    data1.ulPosition=0x0012;

    data1.ulLength=6;

    data1.ulSize=7;

    data1.pData=&[70 73 65 3B 33 31 F2];

然后将data1加入对文件修改的记录列表list之中。

如果应用程序再次从文件中读取数据,假设此次从0x0015<position2>的位置读出长度为10个字节<length3>的数据。根据上面的步骤读出的数值应为[3A 32 30 0D 0A 22 54 6F 70 22]。接着要根据文件修改的记录列表list之中所记录的内容对读出的数据进行修改,修改后的结果为[3B33 31 F2 0D 0A 22 54 6F 70]。

参照上面的流程,假设应用程序对该数据处理后,数据改变为[3B 33 31F2 0A 0D 22 54 6F 70],长度仍为10个字节<length4>。

对处理后的结果数据仍需要进行储存,参照上面的流程,处理后的数据data2的内容为:

data2.ulPosition=0x0015;

data2.ulLength=10;

data2.ulSize=10;

data2.pData=&[3B 33 31 F2 0A 0D 22 54 6F 70];

data2也应加入对文件修改的记录列表list之中。

假设此时应用程序关于文件的处理全部完成,需要将文件filename的内容更新。那么要创建一个临时文件~filename,存储的过程为:

首先存储0-position1的内容,存储后的临时文件内容如图5A所示;

然后根据文件修改的记录列表list中的内容写入data1的数据内容,存储后的临时文件内容如图5B所示;

然后根据文件修改的记录列表list中的内容写入data2的数据内容,存储后的临时文件内容如图5C所示;

最后写入余下的数据,存储后的临时文件内容如图5D所示;

之后将文件filename删除,将文件~filename更名为filename即可。

以上所述,仅为本发明其中的较佳实施例而已,并非用来限定本发明的实施范围;凡依本发明权利要求书所作的均等变化与修饰,均应包含在本发明的权利要求书所要求保护的范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号