日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

pak文件的打包和解包

發(fā)布時(shí)間:2023/12/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pak文件的打包和解包 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

pak格式的文件 一般游戲有資源 游戲素材會(huì)打包放進(jìn)去

比如游戲語(yǔ)音 游戲多加點(diǎn)語(yǔ)音? 多加一些貼圖資源

外部文件實(shí)現(xiàn)的

素材--->pak文件--->用的時(shí)候從文件中取出來(lái)

文件的打包

1 #include<iostream> 2 #include<fstream>//觀于文件的頭函數(shù) 3 using namespace std; 4 5 struct fileInfo 6 { 7 int fileSize;//文件大小 8 int fileOff;//文件在pak中的偏移 9 int fileNameSize;//文件名的長(zhǎng)度 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 //初始化結(jié)構(gòu)體 給結(jié)構(gòu)體內(nèi)存放數(shù)據(jù) 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);//打開(kāi)文件 文本或二進(jìn)制文件 23 resFile[i].seekg(0, ios::end);//將文件指針移動(dòng)到文件末尾end 24 pic[i].fileSize = resFile[i].tellg();//得到文件的大小tellg 25 pic[i].fileNameSize = strlen(pic[i].fileName);//求文件名長(zhǎng)度 26 listSize += 4 + 4 + 4 + pic[i].fileNameSize;//加上單條索引表的長(zhǎng)度 27 // 文件大小4 +文件偏移量4+ 文件名大小4 +文件名長(zhǎng)度 28 } 29 for (int i = 0; i < 4; ++i) 30 { 31 if (i == 0)//第一個(gè)文件 32 { 33 pic[i].fileOff = listSize;//第一個(gè)文件的偏移量就是索引表大小 34 } 35 else 36 { 37 pic[i].fileOff = pic[i - 1].fileOff + pic[i - 1].fileSize; 38 //計(jì)算后面的文件偏移量 39 } 40 } 41 srcFile.open("new.pak", ios::out | ios::binary);//準(zhǔn)備寫入文件 42 43 srcFile.write((char*)&listSize, sizeof(int));//寫入索引表的大小和索引表的個(gè)數(shù) 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)//寫入文件內(nèi)容 55 { 56 resFile[i].seekg(0, ios::beg);//將文件指針移動(dòng)到文件開(kāi)頭 57 while (!resFile[i].eof())//寫文件 58 { 59 srcFile.put(resFile[i].get()); 60 } 61 srcFile.seekp(-1, ios::cur);//刪掉一個(gè)字節(jié) 避免多寫入數(shù)據(jù) 62 resFile[i].close();//寫完關(guān)閉 63 } 64 65 srcFile.close(); 66 67 68 cin.get(); 69 return 0; 70 }

//運(yùn)行后將文件打包到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;//文件名的長(zhǎng)度 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];//寫文件的時(shí)候大小可能不止四個(gè) 19 int listSize, listNum;// Num是索引表的個(gè)數(shù) 20 21 file.read((char*)&listSize, sizeof(int));//讀到索引表的大小 22 file.read((char*)&listNum, sizeof(int)); 23 24 //讀取每條索引的內(nèi)容 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 << "個(gè)文件的內(nè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];//大小其實(shí)用vector或者new好一點(diǎn) 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();//關(guān)閉文件 54 cin.get(); 55 return 0; 56 }

//運(yùn)行exe文件將圖片文件解包

?

轉(zhuǎn)載于:https://www.cnblogs.com/liugangjiayou/p/11388142.html

總結(jié)

以上是生活随笔為你收集整理的pak文件的打包和解包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。