CN1607498A - 应用程序中存取文件数据的方法 - Google Patents
应用程序中存取文件数据的方法 Download PDFInfo
- Publication number
- CN1607498A CN1607498A CN 200310100686 CN200310100686A CN1607498A CN 1607498 A CN1607498 A CN 1607498A CN 200310100686 CN200310100686 CN 200310100686 CN 200310100686 A CN200310100686 A CN 200310100686A CN 1607498 A CN1607498 A CN 1607498A
- Authority
- CN
- China
- Prior art keywords
- data
- file
- application program
- record
- amendment record
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种应用程序中存取文件数据的方法,首先在内存中创建一储存有文件数据修改量的记录,根据该修改记录,将从该文件中读取的数据修改为当前数据,然后将该当前数据进行程序处理以生成结果数据,将该结果数据储存于该内存记录以生成一新的修改记录,最后根据该修改记录对文件内容进行更新并储存,本发明使用内存记录的方式来储存文件的改变量,从而大大减少了文件处理所需要的时间。
Description
技术领域
本发明涉及一种对文件中的数据的存取方法,特别是涉及一种在应用程序中对比特数较大的文件的存取方法。
背景技术
文件处理是计算机应用中最常见的需求,也是大量应用程序软件中频繁需要处理的事务。由于一些应用程序运行时,需要经常的对同一个文件中的不同部分的数据反复的读取、计算,并将返回结果存入该文件中,以备下次读取之用,因此,文件处理的时间决定了应用程序的运行速度,而且,文件的比特数越大,所需要的处理时间就越长。
在已知技术中,读写一个文件的过程通常是要先打开文件,取得文件句柄(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即可。
以上所述,仅为本发明其中的较佳实施例而已,并非用来限定本发明的实施范围;凡依本发明权利要求书所作的均等变化与修饰,均应包含在本发明的权利要求书所要求保护的范围之内。
Claims (9)
1、一种应用程序中存取文件数据的方法,其特征在于,其通过在内存中记录文件数据修改量的方式以提高程序运行中大文件的写入效率,该方法包括:
在内存中创建储存有文件数据修改量的记录;
根据该修改记录,将从该文件中读取的数据修改为当前数据;
将该当前数据进行程序化处理以生成结果数据;
将该结果数据储存于该内存记录以生成新的修改记录;及
根据该修改记录对文件内容进行更新并储存。
2、如权利要求1所述的应用程序中存取文件数据的方法,其特征在于,该修改记录包括数据起始位置、数据原始长度、数据结果长度、数据指针以及数据内容的记录。
3、如权利要求1所述的应用程序中存取文件数据的方法,其特征在于,该根据修改记录将从文件中读取的数据修改为当前数据的步骤,还包括如下步骤:
打开文件取得文件句柄;
将文件指针定位至要读入数据的位置;
读取一段数据,并与修改记录相参照;及
用修改记录中相同位置的数据取代读入的数据。
4、如权利要求3所述的应用程序中存取文件数据的方法,其特征在于,该读取一段数据,并与修改记录相参照的步骤,是每读取一次数据都要与修改记录相对照。
5、如权利要求1所述的应用程序中存取文件数据的方法,其特征在于,如果该修改记录为空,则当前数据与读取数据相同。
6、如权利要求1所述的应用程序中存取文件数据的方法,其特征在于,该根据修改记录对文件内容进行更新并储存的步骤是在应用程序退出时进行的。
7、如权利要求1所述的应用程序中存取文件数据的方法,其特征在于,该根据修改记录对文件内容进行更新并储存的步骤是在使用者强制要求保存文件时进行的。
8、如权利要求1所述的应用程序中存取文件数据的方法,其特征在于,该根据修改记录对文件内容进行更新并储存的步骤,还包括如下步骤:
创建临时文件;
按照对该文件的修改位置对该修改记录进行排序;
将没有修改的数据与修改的数据依序存入该临时文件中;及
用该临时文件取代源文件。
9、如权利要求8所述的应用程序中存取文件数据的方法,其特征在于,该用临时文件取代源文件的步骤,还包括如下步骤:
删除该源文件;及
将该临时文件更名为该源文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2003101006863A CN1294483C (zh) | 2003-10-13 | 2003-10-13 | 应用程序中存取文件数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2003101006863A CN1294483C (zh) | 2003-10-13 | 2003-10-13 | 应用程序中存取文件数据的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1607498A true CN1607498A (zh) | 2005-04-20 |
CN1294483C CN1294483C (zh) | 2007-01-10 |
Family
ID=34756033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003101006863A Expired - Fee Related CN1294483C (zh) | 2003-10-13 | 2003-10-13 | 应用程序中存取文件数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1294483C (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101266268B (zh) * | 2007-03-14 | 2010-08-25 | 英业达股份有限公司 | 电磁干扰数据的存取系统以及方法 |
CN105302488A (zh) * | 2015-10-27 | 2016-02-03 | 浪潮(北京)电子信息产业有限公司 | 一种存储系统的数据写入方法及系统 |
CN110784756A (zh) * | 2019-12-31 | 2020-02-11 | 珠海亿智电子科技有限公司 | 文件读取方法、装置、计算设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7165137B2 (en) * | 2001-08-06 | 2007-01-16 | Sandisk Corporation | System and method for booting from a non-volatile application and file storage device |
-
2003
- 2003-10-13 CN CNB2003101006863A patent/CN1294483C/zh not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101266268B (zh) * | 2007-03-14 | 2010-08-25 | 英业达股份有限公司 | 电磁干扰数据的存取系统以及方法 |
CN105302488A (zh) * | 2015-10-27 | 2016-02-03 | 浪潮(北京)电子信息产业有限公司 | 一种存储系统的数据写入方法及系统 |
CN105302488B (zh) * | 2015-10-27 | 2018-05-01 | 浪潮(北京)电子信息产业有限公司 | 一种存储系统的数据写入方法及系统 |
CN110784756A (zh) * | 2019-12-31 | 2020-02-11 | 珠海亿智电子科技有限公司 | 文件读取方法、装置、计算设备及存储介质 |
CN110784756B (zh) * | 2019-12-31 | 2020-05-29 | 珠海亿智电子科技有限公司 | 文件读取方法、装置、计算设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN1294483C (zh) | 2007-01-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10169366B2 (en) | Deduplicated file system | |
US8868624B2 (en) | Blob manipulation in an integrated structured storage system | |
US8620884B2 (en) | Scalable blob storage integrated with scalable structured storage | |
EP2633413B1 (en) | Low ram space, high-throughput persistent key-value store using secondary memory | |
US7334099B2 (en) | Method and system for managing image files | |
US8412688B1 (en) | Delegated reference count base file versioning | |
AU2009246432B2 (en) | Managing storage of individually accessible data units | |
WO2012083267A2 (en) | Garbage collection and hotspots relief for a data deduplication chunk store | |
US11030156B2 (en) | Key-value store with partial data access | |
US20100057755A1 (en) | File system with flexible inode structures | |
US8180736B2 (en) | Methods for improving file system performance | |
KR20140006945A (ko) | 데이터 중복제거를 위한 백업 및 복원 전략 | |
WO2002071270A1 (en) | Compression scheme for improving cache behavior in database systems | |
EP1702276A1 (en) | Preload library for transparent file transformation | |
US10521117B2 (en) | Unified table delta dictionary memory size and load time optimization | |
US10289709B2 (en) | Interleaved storage of dictionary blocks in a page chain | |
US20120042146A1 (en) | Device and method for storage, retrieval, relocation, insertion or removal of data in storage units | |
CN1822230A (zh) | 基于NAND Flash存储器文件系统的实现方法 | |
Lee et al. | An efficient index buffer management scheme for implementing a B-tree on NAND flash memory | |
CN1904889A (zh) | 用附着属性存储逻辑文件系统元数据的方法 | |
US11210281B2 (en) | Technique for log records management in database management system | |
CN101051317A (zh) | 一种fat文件系统及其处理方法 | |
CN1241136C (zh) | 软件升级的方法 | |
US7447717B2 (en) | Method of changing the page size of a DB2 table space while keeping the object available | |
CN1294483C (zh) | 应用程序中存取文件数据的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20070110 Termination date: 20101013 |