C語言打包解包程式2

2021-09-29 12:21:52 字數 2765 閱讀 1518

#ifndef pach_h

#define pach_h

#define max_path 128

#define max_name 32

typedef struct file file;

typedef struct folder_info folder;

extern void pack();

extern void pack_t(char *path, char *pkfile, char *opt);

extern void pack_l(char *pkfile);

extern void pack_g(char *upkfile, char *fdpath);

#endif

庫函式和標頭檔案包含
#include#include#include#include#include"path.h"
pack用法pack()
void pack()

打包程式pack_t()
int bol = 0;  //值來自ar**[4] 用來判斷是否刪除原資料夾

int stat_info(char *fdpath, file *farray, char *mstr);

int pack_folder(char *fpath);

int copy(char *pkfile, int fsum, file *farray, char *fdpath) //fdpath是絕對路徑 fsum是陣列farray的大小

fwrite(farray, sizeof(file), fsum, in);

size += fsum * sizeof(file);

for(int i = 0; i < fsum; ++i)

file *out = fopen(path, "rb");

if(out == null)

printf("error\n");

char str[30];

int rc = 0;

while((rc = fread(str, sizeof(char), 30, out)) != 0)

fwrite(str, sizeof(char), rc, in);

fclose(out);

if(bol || farray[i].bol)

remove(path);

size += farray[i].size;

}fseek(in, 4, seek_set);

fwrite(farray, sizeof(file), fsum, in);

fclose(in);

return size;

}int pack_folder(char *fpath) //打包資料夾 fpath是資料夾絕對路徑

return size;

}int match(char *s1, char *s2) //匹配函式

int stat_info(char *fdpath, file *farray, char *mstr) //對資料夾中的資訊進行統計 儲存到陣列farray中 返回陣列farray大小

if(strcmp(mstr, "*") == 0) else if(finfo.attrib != _a_subdir && match(mstr, finfo.name))

}} while(_findnext(handle, &finfo) == 0);

_findclose(handle);

return fsum;

}void pack_t(char *path, char *pkfile, char *opt) //path是要打包的檔案 pkfile是打包到的檔案的絕對路徑

檢視打包檔案pack_l()
void pack_l(char *pkfile)

offset += farray[i].size;

}free(farray);

if(i == hand->end)

} else

}fclose(out);

printf("\n");

return;

}

pack_g解包程式
void pack_g(char *upkfile, char *fdpath)

file *farray = (file*)malloc(fsum*sizeof(file));

fread(farray, sizeof(file), fsum, out);

for(int i = 0; i < fsum; ++i)

file *in = fopen(fpath, "wb");

int rc, size = farray[i].size;

char str[30];

while(rc = size > 30 ? 30 : size)

fclose(in);

if(farray[i].bol)

}free(farray);

fclose(out);

remove(upkfile);

return;

}

#include#include"pack.h"

int main(int argc, char *ar**)

C語言 檔案的打包與解包

要求 將多個檔案打包到同一檔案,然後進行解包,解包時如果檔名重複進行標號。ps 這裡只有打包功能,沒有對大小進行壓縮。先考慮兩個問題 1 解包時如何將不同檔案分開?我們可以在寫入檔案內容前,提前寫入乙個結構體,這個結構體存有檔案的大小和檔名,這樣在解包時,我們總是先讀出乙個結構體,得到下乙個檔案的大...

打包和解包彙總 gz bz2 xz zip

gz tar xvzf abc.tar.gz gz壓縮的解包 打包 tar cvzf abc.tar.gz abc.txt bz2 tar xvjf abc.tar.bz2 bz2格式的解包 打包 tar cvjf abc.tar.bz2 abc.txt xz 先xz d abc.tar.xz 然後...

打包c 程式 續

之前有說過使用vs自帶的安裝專案來打包程式,其中也說過那東西打包出來的安裝程式和framework是分開的,使用上來說也不差,但是給使用者難免乙個說明,還要點兩次,不能一傻到底。沒辦法,又花了點時間測試使用了inno setup來打包c 程式。效果就是 安裝程式和執行庫打包成乙個可執行檔案,會根據使...