C语言打包解包程序
本程序是一个打包解包程序,提供了打包解包文件夹,查看打包文件信息,解包等功能。
如果需要打包的文件夹中存在文件夹,会递归打包,解包时也会递归解包,保证原样还原。
头文件及main函数
#include<stdio.h>
#include<io.h>
#include<direct.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
if(argc == 1 && strcmp(argv[0], "pack") == 0)
pack();
if(argc == 3 && strcmp(argv[1], "-t") == 0)
pack_t(argv[2]);
if(argc == 4 && strcmp(argv[1], "-r") == 0)
pack_r(argv[2], argv[3]);
if(argc == 3 && strcmp(argv[1], "-g") == 0)
pack_g(argv[2]);
if(argc == 3 && strcmp(argv[1], "-l") == 0)
pack_l(argv[2]);
return 0;
}
主函数使用命令行参数argc和argv。
查看pack用法
void pack()
{
printf("\npack的用法:\n\n");
printf("\t-t\t打包一个文件\n");
printf("\t-g\t解压一个打包文件\n");
printf("\t-l\t查看打包文件信息\n");
printf("\t-r\t打包匹配文件\n\n");
return;
}
打包程序pack_t()
假如需要打包 E:\temp 文件夹,提供参数 E:\temp,程序执行后会删除temp文件夹,生成一个名为temp1的打包文件,所在位置是E:\temp1
typedef struct file {
char name[_MAX_FNAME];
_fsize_t size;
int bol;
} file;
_fsize_t pack_t(char *s1)
{
char folder_location[_MAX_FNAME]; //存储文件夹路径
strcpy(folder_location, s1);
strcat(folder_location, "\\*");
struct _finddata_t file_info;
long handle = _findfirst(folder_location, &file_info);
if(handle == -1) {
printf("folder location ERROR!");
return 0;
}
int file_sum = 0; //存储文件和文件夹总数
do {
if(strcmp(file_info.name, ".") != 0 && strcmp(file_info.name, "..") != 0)
++file_sum;
} while(_findnext(handle, &file_info) == 0); //统计文件和文件夹数量 除了 . 和 .. 文件
_findclose(handle);
char file_location[_MAX_FNAME]; //打包文件信息
strcpy(file_location, folder_location);
int len2 = strlen(file_location);
file_location[len2-2] = '\0';
strcat(file_location, "1"); //用于区分文件和文件夹
FILE *in = fopen(file_location, "ab");
char delete_folder_string[_MAX_FNAME] = "rd "; //删除文件夹字符串
strcat(delete_folder_string, folder_location);
int len = strlen(delete_folder_string);
delete_folder_string[len-2] = '\0';
if(file_sum == 0) {
fwrite(&file_sum, sizeof(int), 1, in);
fclose(in);
system(delete_folder_string);