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

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

生活随笔

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

编程问答

C语言打包解包文件程序(简易版)

發(fā)布時(shí)間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言打包解包文件程序(简易版) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • //測(cè)試通過(guò)?科嵌電子 ?
  • ?
  • #include?<stdio.h>? ?
  • #include?<string.h>? ?
  • #include?<stdlib.h>? ?
  • ? ?
  • typedef?unsigned?int??uint;? ?
  • typedef?unsigned?char?byte;???????????? ?
  • ? ?
  • //?包文件中最大可容納的文件個(gè)數(shù)? ?
  • #define?MAX_FILE_COUNT?10? ?
  • ? ?
  • //?全局包文件指針? ?
  • FILE*??g_pMasFile?=?NULL;? ?
  • ?
  • //?資源包文件頭結(jié)構(gòu)? ?
  • typedef?struct?SMaseFileHeader? ?
  • {? ?
  • ?uint??uFileFlag;?????????//?包文件頭標(biāo)記:?'MASE'? ?
  • ?uint??uFileCount;????????//?包內(nèi)文件個(gè)數(shù)? ?
  • ?uint??uFileListOfs;??????//?文件列表偏移? ?
  • ?uint??uMaxFileCount;?????//?最大子文件個(gè)數(shù)? ?
  • ?uint??uFileSize;?????????//?包文件的大小? ?
  • }MaseHeader;? ?
  • ? ?
  • //?包內(nèi)文件信息結(jié)構(gòu)? ?
  • typedef?struct?SFilesMessage? ?
  • {? ?
  • ?uint??uFileOfs;??????????//?本文件在包內(nèi)的偏移? ?
  • ?uint??uFileSize;?????????//?本文件的大小? ?
  • ?char??szFileName[260];???//?本文件的路徑? ?
  • }FilesMsg;? ?
  • ?
  • //?打開(kāi)包文件? ?
  • int?OpenMasFile(const?char*?path,?const?byte?onlyOpen)? ?
  • {? ?
  • ?uint???????uWriteCount;???????//?寫入文件信息次數(shù)? ?
  • ?byte???????bIsNew?=?0;????????//?是否新建的? ?
  • ?MaseHeader?header;????????????//?文件頭結(jié)構(gòu)定義? ?
  • ?FilesMsg???msg;???????????????//?文件信息結(jié)構(gòu)定義 ?
  • ?
  • ?g_pMasFile?=?fopen(path,?"rb");??//?用來(lái)判斷是否存在? ?
  • ?if?(g_pMasFile?==?NULL)?????? ?
  • ?{? ?
  • ??if?(onlyOpen?==?1)????????????//?只打開(kāi)不新建? ?
  • ???return?-1;?? ?
  • ? ?
  • ??bIsNew?=?1;? ?
  • ??g_pMasFile?=?fopen(path,?"wb");? ?
  • ??if?(g_pMasFile?==?NULL)? ?
  • ???return?-1;? ?
  • ?}? ?
  • ?
  • ?//先關(guān)閉,然后在用"rb+"方式打開(kāi)??二進(jìn)制讀寫打開(kāi)文件 ?
  • ?fclose(?g_pMasFile?);? ?
  • ?
  • ?g_pMasFile?=?fopen(path,?"rb+");? ?
  • ?if?(g_pMasFile?==?NULL)? ?
  • ??return?-1;? ?
  • ? ?
  • ?if(bIsNew?==?1)//?新建的文件? ?
  • ?{? ?
  • ??header.uFileFlag?????=?'ESAM';? ?
  • ??header.uFileCount????=?0;? ?
  • ??header.uFileListOfs??=?sizeof(MaseHeader);?//緊跟著就是文件列表? ?
  • ??header.uMaxFileCount?=?MAX_FILE_COUNT;? ?
  • ??header.uFileSize?????=?sizeof(MaseHeader)?? ?
  • ??????????+?(MAX_FILE_COUNT?*?sizeof(FilesMsg));? ?
  • ?
  • ??//寫入頭信息? ?
  • ??fwrite(&header,?sizeof(MaseHeader),?1,?g_pMasFile);? ?
  • ??memset(&msg,?0,?sizeof(FilesMsg));? ?
  • ??uWriteCount?=?MAX_FILE_COUNT;? ?
  • ?
  • ??//寫入文件列表用0占位? ?
  • ??while(uWriteCount--)? ?
  • ?????fwrite(&msg,?sizeof(FilesMsg),?1,?g_pMasFile);? ?
  • ?}? ?
  • ?else//文件存在? ?
  • ?{? ?
  • ????//則讀取頭文件信息? ?
  • ????fread(&header,?sizeof(MaseHeader),?1,?g_pMasFile);? ?
  • ?}? ?
  • ?
  • ?//檢查文件頭標(biāo)記? ?
  • ?if?(header.uFileFlag?!=?'ESAM')? ?
  • ?{? ?
  • ??fclose(g_pMasFile); ?
  • ??printf("文件頭標(biāo)記不對(duì),錯(cuò)誤!\n"); ?
  • ??return?-1;? ?
  • ?}? ?
  • ? ?
  • ?//檢查數(shù)據(jù)是否完整? ?
  • ?if?(header.uMaxFileCount?!=?MAX_FILE_COUNT)? ?
  • ?{? ?
  • ??fclose(g_pMasFile);? ?
  • ??printf("數(shù)據(jù)不完整,錯(cuò)誤!\n"); ?
  • ?????return?-1;? ?
  • ?}? ?
  • ? ?
  • ?return?0;? ?
  • }? ?
  • ? ?
  • //寫文件到包里? ?
  • int?WriteFileToPak(const?char*?path)? ?
  • {? ?
  • ?FilesMsg???fileMsg;??????//此文件的文件信息結(jié)構(gòu)? ?
  • ?MaseHeader?header;???????//包文件頭結(jié)構(gòu)定義? ?
  • ?uint???????uFileSize;? ?
  • ?uint???????uFileListEndOfs;? ?
  • ?byte*??????pBuff;? ?
  • ?FILE*??????pFile?=?NULL;? ?
  • ? ?
  • ?if?(g_pMasFile?==?NULL)? ?
  • ?????return?-1;? ?
  • ? ?
  • ?memset(&fileMsg,?0,?sizeof(FilesMsg));? ?
  • ?fseek(g_pMasFile,?0,?SEEK_SET);????//定位到文件頭,讀取頭文件信息 ?
  • ? ?
  • ?//則讀取頭文件信息? ?
  • ?fread(&header,sizeof(MaseHeader),?1,?g_pMasFile);? ?
  • ? ?
  • ?uFileListEndOfs?=?header.uFileCount?*?sizeof(FilesMsg)?+?header.uFileListOfs;? ?
  • ? ?
  • ?pFile?=?fopen(path,?"rb");? ?
  • ?if(pFile?==?NULL)? ?
  • ?????return?-1;? ?
  • ? ?
  • ?fseek(pFile,?0,?SEEK_END);? ?
  • ?uFileSize?=?ftell(pFile);? ?
  • ?fseek(pFile,?0,?SEEK_SET);? ?
  • ? ?
  • ?//文件名長(zhǎng)度不能超過(guò)260? ?
  • ?strcpy(fileMsg.szFileName,path);? ?
  • ?fileMsg.uFileOfs??=?header.uFileSize;? ?
  • ?fileMsg.uFileSize?=?uFileSize;? ?
  • ? ?
  • ?//?寫入文件信息? ?
  • ?//?將文件指針定位到uFileListEndOfs處,以便寫入新的文件信息結(jié)構(gòu)? ?
  • ?fseek(g_pMasFile,?uFileListEndOfs,?SEEK_SET);? ?
  • ?fwrite(&fileMsg,sizeof(FilesMsg),1,g_pMasFile);? ?
  • ? ?
  • ?//?申請(qǐng)空間? ?
  • ?pBuff?=?(byte*)malloc(uFileSize);? ?
  • ?fread(pBuff,uFileSize,1,pFile);? ?
  • ? ?
  • ?//?寫數(shù)據(jù)到包文件里? ?
  • ?fseek(g_pMasFile,header.uFileSize,SEEK_SET);? ?
  • ?fwrite(pBuff,?uFileSize,?1,?g_pMasFile);? ?
  • ? ?
  • ?//?釋放內(nèi)存? ?
  • ?free(pBuff);? ?
  • ? ?
  • ?//重新填充header? ?
  • ?header.uFileCount?+=?1;? ?
  • ?header.uFileSize??+=?uFileSize;? ?
  • ? ?
  • ?fseek(?g_pMasFile,0,SEEK_SET);? ?
  • ? ?
  • ?//?重新寫入包文件頭? ?
  • ?fwrite(&header,sizeof(MaseHeader),1,g_pMasFile);? ?
  • ? ?
  • ?return?0;? ?
  • }? ?
  • ? ?
  • //從包文件里讀數(shù)據(jù)? ?
  • int?ReadFileFromPak(const?FilesMsg?msg,?byte*?_dst)? ?
  • {? ?
  • ?if?(?g_pMasFile?==?NULL?)? ?
  • ?????return?-1;? ?
  • ? ?
  • ?fseek(g_pMasFile,?msg.uFileOfs,SEEK_SET);? ?
  • ?fread(_dst,?msg.uFileSize,?1,?g_pMasFile);? ?
  • ? ?
  • ?return?0;? ?
  • }? ?
  • ? ?
  • //獲取包中某個(gè)文件的信息? ?
  • int?GetFileMessage(?const?char*?path,?FilesMsg*?msg)? ?
  • {? ?
  • ?FilesMsg???fileMsg;??????//?此文件的文件信息結(jié)構(gòu)? ?
  • ?MaseHeader?header;???????//?包頭結(jié)構(gòu)? ?
  • ?uint???????uFileCount;???//?文件個(gè)數(shù)? ?
  • ? ?
  • ?if?(?g_pMasFile?==?NULL?||?msg?==?NULL?)? ?
  • ?????return?-1;? ?
  • ? ?
  • ?//?則讀取頭文件信息? ?
  • ?fseek(g_pMasFile,?0,?SEEK_SET);? ?
  • ?fread(&header,?sizeof(MaseHeader),?1,?g_pMasFile);? ?
  • ? ?
  • ?uFileCount?=?header.uFileCount;? ?
  • ?while?(uFileCount--)? ?
  • ?{? ?
  • ?????fread(&fileMsg,?sizeof(FilesMsg),?1,g_pMasFile);? ?
  • ?
  • ?????//?判斷是否是要獲取的文件? ?
  • ?????if?(stricmp(fileMsg.szFileName,?path)?==?0?)? ?
  • ?????{????????????? ?
  • ???*msg?=?fileMsg;? ?
  • ?????????return?0;? ?
  • ?????}? ?
  • ?}? ?
  • ?return?-1;? ?
  • }? ?
  • ? ?
  • //?關(guān)閉包文件? ?
  • int?CloseMasFile(?void?)? ?
  • {? ?
  • ?if?(?g_pMasFile?==?NULL?)? ?
  • ?????return?-1;? ?
  • ? ?
  • ?fclose(?g_pMasFile?);? ?
  • ?g_pMasFile?=?NULL;? ?
  • ? ?
  • ?return?0;? ?
  • } ?
  • //這是打包主函數(shù) ?
  • ?
  • int?main(?void?)? ?
  • {? ?
  • ?int?ret;? ?
  • ? ?
  • ?ret?=?OpenMasFile(?"E:\\PhotoPak.bin",0);? ?
  • ?if?(?ret?==?-1?)? ?
  • ?????goto?__exit;???? ?
  • ?WriteFileToPak(?"E:\\珍貴.jpg"?);? ?
  • ?WriteFileToPak(?"E:\\123.docx"?);? ?
  • ?WriteFileToPak(?"E:\\456.txt"?);? ?
  • ?
  • ?__exit:? ?
  • ?CloseMasFile();? ?
  • ?return?0;? ?
  • }?? ?
  • //查看打包中的文件,并且可以解包查看 ?
  • ?
  • int?main(?void?)? ?
  • {? ?
  • ?byte*???????pBuff;? ?
  • ?FILE*???????pOutFile;? ?
  • ?FilesMsg????getFileMsg;? ?
  • ?int?????????ret;? ?
  • ? ?
  • ?ret?=?OpenMasFile("E:\\PhotoPak.bin",?1);? ?
  • ?if?(ret?==?-1)? ?
  • ????goto?__exit;? ?
  • ?? ?
  • ?ret?=?GetFileMessage("E:\\123.docx",?&getFileMsg);? ?
  • ?if(ret?==?-1)? ?
  • ????goto?__exit;? ?
  • ? ?
  • ?pBuff?=?(byte*)malloc(getFileMsg.uFileSize);? ?
  • ?ret?=?ReadFileFromPak(getFileMsg,?pBuff);? ?
  • ?if(ret?==?-1)? ?
  • ?????goto?__exit_free;? ?
  • ? ?
  • ?pOutFile?=?fopen("E:\\123_out.docx",?"wb");??//?注意使用的是二進(jìn)制模式? ?
  • ?if(ret?==?-1)? ?
  • ?????goto?__exit_free;? ?
  • ?? ?
  • ?fwrite(?pBuff,?getFileMsg.uFileSize,?1,?pOutFile?);? ?
  • ????fclose(?pOutFile?);? ?
  • ?????? ?
  • ?__exit_free:? ?
  • ?free(?pBuff?);? ?
  • ? ?
  • ?__exit:? ?
  • ????CloseMasFile();? ?
  • ????return?0;? ?
  • } ?
  • ?
  • ?

    轉(zhuǎn)載于:https://blog.51cto.com/591819849/1101479

    總結(jié)

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

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

    主站蜘蛛池模板: 免费毛片一区二区三区久久久 | www色网| 色人阁五月天 | 人人干狠狠干 | 自由成熟xxxx色视频 | 日本国产高清 | 中文字幕欧美一区 | 成人刺激视频 | 日本一区二区久久 | 1024毛片基地 | 国产aaaaa毛片 | 久久日本视频 | 一区二区视频免费 | 日本老师巨大bbw丰满 | 色啊色 | 欧美精品v | 欧美精品videos极品 | 欧美偷拍一区二区三区 | 91在线精品秘密一区二区 | 色老头在线一区二区三区 | 久久久久久无码午夜精品直播 | 欧美性大战久久久久久 | 一级片免费在线观看 | 91国内精品 | 人人爱超碰| 超碰97观看 | 色眯眯视频 | 波多野结衣亚洲视频 | 日韩欧美少妇 | 日韩一区二区三区精 | 日韩城人网站 | 久久久久毛片 | 青草综合 | 日韩福利视频一区 | 成人自拍视频网站 | a毛片网站 | av夜色| 精品国产一区一区二区三亚瑟 | 北条麻妃一区二区三区 | eeuss鲁片一区二区三区在线观看 | 波多野42部无码喷潮在线 | 国产欧洲亚洲 | 91热久久 | 永久免费看片在线播放 | 人人精品久久 | 嫩草在线视频 | 黄色免费看视频 | 国产日韩精品在线观看 | 在线精品免费视频 | 蜜桃av噜噜一区二区三区网址 | h成人在线| 国产明星换脸xxxx色视频 | 国产1区| 一区二区三区在线视频观看 | 宅男视频在线免费观看 | 伊人ab| 国产另类自拍 | 国产婷婷色一区二区 | 精品视频一区二区在线观看 | 小视频国产 | 91第一页| 自拍偷拍中文字幕 | 日日爽爽 | 成人a级免费视频 | 国产欧美日韩精品区一区二污污污 | 美女av免费在线观看 | 日韩av一区二区在线 | 国产av一区二区三区最新精品 | 悠悠色在线 | 都市激情亚洲色图 | 999精品国产| 国产做爰xxxⅹ久久久精华液 | 天天色天天插 | 99久久99久久精品国产片 | 毛片在线视频观看 | 亚洲国产精一区二区三区性色 | 一级成人免费视频 | 日韩经典一区二区三区 | 精品国产一区二 | 99热这里只有精品5 国产精品伦子伦免费视频 精品一二三 | 浴室里强摁做开腿呻吟男男 | 国产成人av一区二区三区在线观看 | 天天看夜夜 | 国产激情综合五月久久 | 国产精品亚洲成在人线 | 天天操欧美 | 欧美日韩亚洲国产另类 | 亚洲精品视频久久 | wwww欧美| 亚洲一级二级三级 | 婷婷在线网 | 国产亚洲精品久久久久久 | 欧美性极品 | 色综合五月婷婷 | 一级女性全黄久久生活片免费 | 人人射| 穿扒开跪着折磨屁股视频 | 人体av | 天天干天天爽天天操 |