#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 程式。效果就是 安裝程式和執行庫打包成乙個可執行檔案,會根據使...