用C++实现文件资源的打包与解包
第5卷第21期2005年l1月
16711815(2005)21—1653—03
科学技术与工程
ScienceTechnologyandEngineering
V o1.5No.21NOV.2005
阿q正传读后感
⑥2005Sci.Tech.Engng.
用C++实现文件资源的打包与解包
周颖杰王瑾张鹏刘洁
(军械工程学院计算机工程系,石家庄050003)
摘要文件资源的打包与解包在实际当中有着广泛的应用,介绍了Windows编程中文件打包,解包的基本原
理及实现方法,并利用可变长结构解决了文件信息存储过程中的空间浪费问题. 关键词C++打包解包
中图法分类号TP317;文献标识码B
在实际应用中,文件资源的打包解包很常见,就
是把多个零散的文件转换成单一的文件,常用的压许昌职业技术学院网络教学平台
缩软件也可以认为是对文件一种打包处理,同时通
过某种算法对文件进行压缩.大量的零散文件容易
产生很多"碎片",浪费存储空间,有些文件如文本文
件能够被随意修改,安全性得不到保证等等.通过
文件打包可以将多个文件转换成单个文件,减少了雪人画
"碎片",节约了存储空间,并且可以将文本文件转换
成二进制文件,提高了数据安全性.
l文件结构设计
文件打包后要保证在使用的时候能够正确地解
包,恢复成原来的文件,所以打包后的文件结构必须
运营总监职责
要考虑方便以后的解包和使用,应该注意以下几点: (1)具有打包文件的标识信息能够与其他文件
区分;
(2)具有标识文件打包后准确位置的信息,如文怎么发qq空间
件名长度,偏移值,文件长度等;
(3)要考虑文件信息存储时的空间浪费问题.
议息会议常见的打包文件结构一般有如下几种.
一
逼眼
是将要打包的文件的信息按顺序写入到打包
文件中,其中包括文件的文件名长度,文件名,文件
长度,文件内容等,通过这种结构可以很方便地利用
文件名长度,文件长度分别得到文件名,文件内容,
从而将各个文件从打包文件中提取出来,如图1所
2005年7月12日收到
第一作者简介:周颖杰,男,1981年3月出生,满族,助教,研究方向:计算机应用.
示.二是将各个文件的相关索引信息写在打包文件
的开头,随后再写入各个文件的内容.其中文件名
是固定长的,文件内容可以通过偏移量加上文件长
度来提取,如图2所示.三是通过索引文件和内容
文件两个文件来完成对文件的打包,可以说这种结
构是第二种结构的另一种形式,即将索引信息和文
件内容分开,通过索引文件查找内容文件中各个文
件内容的位置,来完成定位提取,如图3所示.这三
种结构都需要一个文件头,用以与其他类型的文件
●
区分.
文件头(标识信息)
第一个文件名长度
文件文件名
文件长度
信息文件内容
文件名长度第二个
文件文件名
文件长度
信息文件内容
文件名长度第N个
文件文件名
文件长度
信息文件内容
文件头(标识信息)
窗帘的英语
第一个文件名
文件的偏移值
索引文件长度
第N个文件名
文件的偏移值
索引文件长度
第一个文件内容
第二个文件内容
第N个文件内容
图1提取打包文件图2文件内容提取
这三种结构各有各的特点.第一种结构简单灵活,可以很方便地往打包文件中添加新的文件.第二种结构由于索引信息与文件内容不连续,添加文件时需要进行大量的挪动空间,所以不太方便.第三种结构是前两种结构的结合,可以比较方便地对文件进行添加和删除,而且由于是两个文件来完成
科学技术与工程5卷
对文件的打包,安全性更高,在多层结构的网络数据传输中可以使用这种结构.
索引文件内容文件
文件头(标识信息)
第一个偏移值
文件长度文件的
文件名长度
索引文件名
第二个偏移值
文件长度文件的
文件名长度
索引文件名
偏移值第N个
文件长度文件的
文件名长度
索引文件名
文件头(标识信息)
第一个文件内容
第二个文件内容
第N个文件内容
图3通过索引提取文件
2程序实现
2.1文件打包
了解了第三种结构的内容和特点后就可以据此
进行具体的设计和实现了.由于是对文件资源的打包,所以正确设计存储文件信息的结构和对文件的正确读,写,定位是具体实现中的重点.
首先需要设计存储文件索引信息的结构.在设
计这个结构的时候要考虑到存储空间的浪费问题,
主要是文件名,由于Windows操作系统支持长文件
名,如果文件名设为固定长,那么必然造成存储空间
的浪费,所以应该设为变长结构,并且文件名要放在
结构的最后一项,这样可以通过动态的分配空间,完
成对索引信息的存储和提取,从而实现对文件的打
包和解包.具体结构声明如下.
StructPacklnfo//用于存储文件信息的结构,这
里定义的是一个可变长的结构
{
DWORDdwOfft;//偏移值
DWORDdwSize;,//文件长度
DWORDdwNameLen;//文件名长度
charFileNameE1];//文件名
};
有了存储索引信息的结构之后的工作就是怎样
来添加索引信息以及如何对文件进行操作,win—
dows操作系统提供了丰富的文件操作函数[2],如WriteFile(),ReadFile(),SetFilePointer()等等,通
过这些函数可以方便地对文件进行读,写,定位等操
作.结合第三种结构的特点,打包时最好同时生成
索引文件和内容文件,以确保索引文件中各个文件
的信息与内容文件中各个文件内容一一对应,否则,
解包时就会出错.可通过如下函数实现:
//打包函数.参数分别为索引文件旬柄,内容文件旬柄,要打包的文件的文件名
BOOLCPackFileInstance::PackFile(HANDLEfpPackIndex, HANDLEfpPackFile,char*szFileName)
f
}