C语言打包解包程序

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); 
  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值