引用头文件#include<fstream>
,使用对象来操作I/O流。
创建文件操作对象fstream file(文件名,操作方式)
,ios::in
(读取)、ios::out
(写入) 、 ios::binary
(二进制)
利用I/O流来打包和解包
这里打包和解包的格式要一致,要不然会出错,通常打包我们都会写一个索引表(类似书本的目录,方便我们取出内容),索引表格式为: 索引表大小(4个字节) 文件数量(4个字节) 文件1大小(4个字节) 文件1偏移(4个字节) 文件1名大小(4个字节) 文件1名(文件1名大小个字节) 文件2…
计算偏移是关键!
- 打包
//索引表大小:4 文件数量:4 文件1大小 文件1偏移 文件1名大小 文件1名 文件2...
struct fileinfo
{
int fileNameSize;//文件名大小
int fileoffset;//文件偏移
int fileSize;
char fileName[20];
};
void packFile()
{
//四个文件结构体
fileinfo fileList[4] = {
{
0, 0, 0, "1.jpg" },
{
0, 0, 0, "2.jpg" },
{
0, 0, 0, "3.jpg" },
{
0, 0, 0, "4.jpg" }
};
fstream file[4];//四个读文件对象
int listSize = 0, fileNum = 4;//索引表大小和文件数量
for (int i = 0; i < 4; ++i)
{
//求文件名大小
fileList[i].fileNameSize = strlen(fileList