pak格式的文件 一般游戏有资源 游戏素材会打包放进去

比如游戏语音 游戏多加点语音  多加一些贴图资源

外部文件实现的

素材--->pak文件--->用的时候从文件中取出来

文件的打包

 1 #include<iostream>
 2 #include<fstream>//观于文件的头函数
 3 using namespace std;
 4
 5 struct fileInfo
 6 {
 7     int fileSize;//文件大小
 8     int fileOff;//文件在pak中的偏移
 9     int fileNameSize;//文件名的长度
10     char* fileName;//文件名
11 };
12 int main()
13 {
14     fileInfo pic[4] = { { 0, 0, 0, "背景.jpg" }, { 0, 0, 0, "人物.jpg" }, { 0, 0, 0, "箱子.jpg" }, { 0, 0, 0, "目的地.jpg" } };
15     //初始化结构体 给结构体内存放数据
16     int listNum = 4, listSize = 8;
17
18     fstream resFile[4];//源文件
19     fstream srcFile;//打包之后的文件
20     for (int i = 0; i < 4; i++)
21     {
22         resFile[i].open(pic[i].fileName, ios::in | ios::binary);//打开文件 文本或二进制文件
23         resFile[i].seekg(0, ios::end);//将文件指针移动到文件末尾end
24         pic[i].fileSize = resFile[i].tellg();//得到文件的大小tellg
25         pic[i].fileNameSize = strlen(pic[i].fileName);//求文件名长度
26         listSize += 4 + 4 + 4 + pic[i].fileNameSize;//加上单条索引表的长度
27         // 文件大小4  +文件偏移量4+ 文件名大小4 +文件名长度
28     }
29     for (int i = 0; i < 4; ++i)
30     {
31         if (i == 0)//第一个文件
32         {
33             pic[i].fileOff = listSize;//第一个文件的偏移量就是索引表大小
34         }
35         else
36         {
37             pic[i].fileOff = pic[i - 1].fileOff + pic[i - 1].fileSize;
38             //计算后面的文件偏移量
39         }
40     }
41     srcFile.open("new.pak", ios::out | ios::binary);//准备写入文件
42
43     srcFile.write((char*)&listSize, sizeof(int));//写入索引表的大小和索引表的个数
44     srcFile.write((char*)&listNum, sizeof(int));
45
46     for (int i = 0; i < 4; ++i)//写索引表
47     {
48         srcFile.write((char*)&pic[i].fileSize, sizeof(int));
49         srcFile.write((char*)&pic[i].fileOff, sizeof(int));
50         srcFile.write((char*)&pic[i].fileNameSize, sizeof(int));
51         srcFile.write(pic[i].fileName, pic[i].fileNameSize);
52     }
53
54     for (int i = 0; i < 4; ++i)//写入文件内容
55     {
56         resFile[i].seekg(0, ios::beg);//将文件指针移动到文件开头
57         while (!resFile[i].eof())//写文件
58         {
59             srcFile.put(resFile[i].get());
60         }
61         srcFile.seekp(-1, ios::cur);//删掉一个字节  避免多写入数据
62         resFile[i].close();//写完关闭
63     }
64
65     srcFile.close();
66
67
68     cin.get();
69     return 0;
70 }

//运行后将文件打包到new.pak中

文件的解包

 1 #include<iostream>
 2 #include<fstream>
 3 using namespace std;
 4
 5 struct fileInfo
 6 {
 7     int fileSize;//文件大小
 8     int fileOff;//文件在pak中的偏移
 9     int fileNameSize;//文件名的长度
10     char fileName[128];//文件名
11 };
12
13
14 int main()
15 {
16     fstream file;
17     file.open("new.pak", ios::in | ios::binary);//读取文件
18     fileInfo pic[4];//写文件的时候大小可能不止四个
19     int listSize, listNum;// Num是索引表的个数
20
21     file.read((char*)&listSize, sizeof(int));//读到索引表的大小
22     file.read((char*)&listNum, sizeof(int));
23
24     //读取每条索引的内容
25     for (int i = 0; i < listNum; ++i)
26     {
27         file.read((char*)&pic[i].fileSize, sizeof(int));
28         file.read((char*)&pic[i].fileOff, sizeof(int));
29         file.read((char*)&pic[i].fileNameSize, sizeof(int));
30         file.read(pic[i].fileName, pic[i].fileNameSize);//需要注意\0
31         pic[i].fileName[pic[i].fileNameSize] = '\0';
32         cout << i << "个文件的内容------------------" << endl;
33         cout << pic[i].fileSize << endl;
34         cout << pic[i].fileOff << endl;
35         cout << pic[i].fileNameSize << endl;
36         cout << pic[i].fileName << endl;
37     }
38     fstream res[4];//大小其实用vector或者new好一点   listNum
39
40
41     //前面有文件大小和文件偏移量  如果读取特定的文件 可以直接用索引中的大小和偏移量读取
42     for (int i = 0; i < listNum; ++i)
43     {
44         res[i].open(pic[i].fileName, ios::out | ios::binary);
45         for (int j = 0; j < pic[i].fileSize; ++j)
46         {
47             res[i].put(file.get());
48         }
49         res[i].close();
50     }
51
52
53     file.close();//关闭文件
54     cin.get();
55     return 0;
56 }

//运行exe文件将图片文件解包

转载于:https://www.cnblogs.com/liugangjiayou/p/11388142.html

pak文件的打包和解包相关推荐

  1. android 根目录 文件 打包,Android image文件的打包和解包

    Android image文件的打包和解包 平台:msm8909+android5.1 用file *查看img文件的类型: 图1 Ramdisk.img和ramdisk-recovery.img为g ...

  2. linux 加载 iso,Linux iso文件加载和解包的用法

    Linux iso文件已被广泛应用但是也在不断的更新,这里介绍Linux iso文件安装设置使用,帮助大家安装更新Linux iso文件系统.软件包管理 之Linux Fedora 软件包管理器sys ...

  3. Python赋值、打包和解包,90%人不清楚的知识点!

      人生苦短,快学Python! 关于赋值.打包和解包这 3个概念,我觉得有必要做一个分享,因为很多朋友确实不清楚. 如果有这样一个元组t: >> t = ('foo', 'bar', ' ...

  4. linux 文件的打包和解压

    文件的打包和解压:tar tar -czf name.tar.gz /etc 一般情况下使用-czf参数,c 为创建新的存档.z 为指定压缩方式为gzip( j 为bzip2,J 为xz)(要加后缀: ...

  5. rtp h264打包和解包

    1.学习思路 在了解rtp对h264数据的打包之前,需要对rtp.h264的一些基本概念有一个初步的了解,然后再使用rtp对h264的打包解包做解析 2.rtp认知 实时传送协议(Real-time ...

  6. Python从入门到实践:打包和解包(*和**)的使用

    目录 一.打包参数 二.解包参数 三.几点注意 *和**在函数的定义和调用阶段,有着不同的功能,并且,*和**不能离开函数使用! 一.打包参数 * 的作用:在函数定义中,收集所有位置参数到一个新的元组 ...

  7. [oeasy]python0019_ 打包和解包_struct_pack_unpack

    打包和解包 回忆上次内容 ASCII 由这样几类字符构成 英文大写字符 英文小写字符 数字 符号 电报时代对于英文.数字的编码 使用的是摩斯电码 这摩斯电码是3进制的编码方式 长短空 怎么演化成asc ...

  8. asar软件包linux,ASAR文件查看打包解包工具下载-ASAR文件查看打包解包工具v2018.07.12免费版-ucbug软件站...

    ASAR文件查看打包解包工具是一款能够帮助用户对ASAR文件进行管理的工具,通过ASAR文件查看打包解包工具能够对文件进行查看.打包.解包等功能,有需要的可以下载使用. 功能介绍 electron的a ...

  9. python基础第五课--从字符串中打包和解包大整数(小白piao分享)

    #4.从字符串打包和解包大整数 #将一个字符串解包成一个大整数,将一个大整数打包成一个字符串 #4.1 解决方案: #假设程序需要处理一个有16个元素的字节串,其中保存着一个128位的大整数 data ...

最新文章

  1. python图像相似度识别_一个用SIFT特征比较图像相似度的python小程序
  2. boost::log::sinks::file用法的测试程序
  3. 搞笑之----普通话
  4. nginx+upsync+consul 构建动态nginx配置系统
  5. Mysql Type中的all和index区别?
  6. SharePoint2007安装图文详解二:安装AD(活动目录)及DNS
  7. NEWSCTF第二届--官方wp(2021.6.1萌新赛)
  8. ESP8266教程4 — ESP8266 智能配网
  9. Unable to instantiate service com.baidu.android.pushservice.PushService: java.lang.ClassNotFoundExc
  10. PID到底是个啥?来给你讲个故事
  11. 通过IP连接oracle数据库
  12. 华为交换机路由器consle忘记密码该怎么办?
  13. WT2605-24SS音频解码芯片,实现宠物(玩具)喂食器远程更新语音技术方案解析
  14. matlab能画五维吗,进化算法之粒子群算法和Matlab实现(多维)
  15. 【资源】重磅!清华大学网上课程面向全国免费开放!无需登录、注册!在家上清华!...
  16. java lambdamart库,LambdaMART笔记
  17. 微信小程序在wxml中的数据保留小数和取整
  18. MedSegDiff
  19. (分享)2017云栖大会知识图谱专场
  20. 测试经理的工作以及素质

热门文章

  1. rust卡领地柜权限_rust一个领地柜有多大范围 | 手游网游页游攻略大全
  2. 如何扩大计算机运行内存,运行内存,小编教你如何扩大电脑的运行内存
  3. word press html,wordpress广告插件24款 管理网站广告代码很方便
  4. Codeforces Round 775(Div.2) Problem C Weird Sum(匿名函数的使用)
  5. 网易mc显示服务器异常,明日之后:一天之内3次服务器异常,网易果真是“土豆服务器”!...
  6. 51单片机实现两路AD检测、数码管显示、串口获取
  7. Java基础练习题_05
  8. 优雅代码的秘密,都藏在这6个设计原则中
  9. 第38.1节 osg加载大tif-编译vpb
  10. R语言高维数据的pca、 t-SNE算法降维与可视化分析案例报告