首页主机资讯c语言压缩文件代码如何写

c语言压缩文件代码如何写

时间2024-06-12 11:48:05发布访客分类主机资讯浏览1049
导读:在C语言中,可以使用zlib库来进行文件的压缩和解压缩操作。以下是一个简单的示例代码,演示如何使用zlib库来压缩一个文件: #include <stdio.h> #include <stdlib.h> #inclu...

在C语言中,可以使用zlib库来进行文件的压缩和解压缩操作。以下是一个简单的示例代码,演示如何使用zlib库来压缩一个文件:

#include <
    stdio.h>
    
#include <
    stdlib.h>
    
#include <
    string.h>
    
#include <
    zlib.h>


#define CHUNK 16384

int compress_file(const char *source, const char *dest) {
    
    FILE *source_file = fopen(source, "rb");

    if (!source_file) {
    
        fprintf(stderr, "Unable to open source file\n");
    
        return -1;

    }
    

    FILE *dest_file = fopen(dest, "wb");

    if (!dest_file) {
    
        fprintf(stderr, "Unable to open destination file\n");
    
        fclose(source_file);
    
        return -1;

    }
    

    z_stream stream;
    
    stream.zalloc = Z_NULL;
    
    stream.zfree = Z_NULL;
    
    stream.opaque = Z_NULL;
    
    stream.avail_in = 0;
    
    stream.next_in = Z_NULL;
    
    if (deflateInit(&
stream, Z_BEST_COMPRESSION) != Z_OK) {
    
        fprintf(stderr, "Failed to initialize deflate stream\n");
    
        fclose(source_file);
    
        fclose(dest_file);
    
        return -1;

    }
    

    unsigned char in[CHUNK];
    
    unsigned char out[CHUNK];
    
    int ret;

    do {
    
        stream.avail_in = fread(in, 1, CHUNK, source_file);

        if (ferror(source_file)) {
    
            deflateEnd(&
    stream);
    
            fclose(source_file);
    
            fclose(dest_file);
    
            return -1;

        }
    

        stream.next_in = in;

        do {
    
            stream.avail_out = CHUNK;
    
            stream.next_out = out;
    
            ret = deflate(&
    stream, feof(source_file) ? Z_FINISH : Z_NO_FLUSH);

            if (ret == Z_STREAM_ERROR) {
    
                deflateEnd(&
    stream);
    
                fclose(source_file);
    
                fclose(dest_file);
    
                return -1;

            }
    

            fwrite(out, 1, CHUNK - stream.avail_out, dest_file);

        }
     while (stream.avail_out == 0);

    }
     while (!feof(source_file);
    

    deflateEnd(&
    stream);
    
    fclose(source_file);
    
    fclose(dest_file);
    

    return 0;

}


int main() {
    
    const char *source_file = "source.txt";
    
    const char *dest_file = "compressed.dat";

    
    if (compress_file(source_file, dest_file) == 0) {
    
        printf("File compressed successfully\n");

    }
 else {
    
        printf("Failed to compress file\n");

    }
    

    return 0;

}
    

在上面的代码中,compress_file函数用于压缩一个文件。首先打开源文件和目标文件,然后使用zlib库中的deflateInit函数初始化压缩流。接着循环读取源文件数据,并使用deflate函数将数据进行压缩,最后将压缩后的数据写入目标文件。压缩完成后,关闭文件和释放资源。

注意:在编译这段代码之前,需要安装zlib库。可以通过在终端中运行sudo apt-get install zlib1g-dev来安装zlib库。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: c语言压缩文件代码如何写
本文地址: https://pptw.com/jishu/680687.html
托管主机和租赁主机有什么区别 c语言写的程序如何打包

游客 回复需填写必要信息