HarmonyOS 鸿蒙Next zlib decompressFile解压文件希望显示解压进度

发布于 1周前 作者 eggper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next zlib decompressFile解压文件希望显示解压进度 zlib.decompressFile解压文件 ,希望显示解压进度

2 回复

包管理这边目前只维护,不准备继续演进zlib接口,要满足诉求的话,推荐使用NDK。

1. 在ide中,创建一个C++ Class

cke_1932.png

建立对应的文件,如myzlib.h,myzlib.cpp

2.修改CMakeLists.txt

cke_2845.png

第6行,定义SRC_PATH

第9行,加入依赖路径

第11行,加入对应的源文件

第12行,添加依赖的so,其中zlib的为libz.so

3.添加对应的方法

zlib的头文件在sdk中,可以直接引用,具体内容可以参考 Sdk\openharmony\10\native\sysroot\usr\include\zlib.h

以对文件压缩为例:

#include <cstdio>
#include "zlib.h"

int Compress(std::string inputFileName, std::string outputFileName) {
    FILE *inputFile = fopen(inputFileName.c_str(), "rb");
    if (!inputFile) {
        perror("Error opening input file");
        return 1;
    }

    FILE *outputFile = fopen(outputFileName.c_str(), "wb");
    if (!outputFile) {
        perror("Error opening output file");
        fclose(inputFile);
        return 1;
    }

    z_stream stream;
    memset(&stream, 0, sizeof(stream));

    deflateInit(&stream, Z_DEFAULT_COMPRESSION);

    unsigned char inBuffer[CHUNK_SIZE];
    unsigned char outBuffer[CHUNK_SIZE];

    int bytesRead;
    do {
        bytesRead = fread(inBuffer, 1, CHUNK_SIZE, inputFile);
        stream.avail_in = bytesRead;
        stream.next_in = inBuffer;

        do {
            stream.avail_out = CHUNK_SIZE;
            stream.next_out = outBuffer;
            deflate(&stream, Z_FINISH);

            int compressedBytes = CHUNK_SIZE - stream.avail_out;
            if (compressedBytes > 0) {
                fwrite(outBuffer, 1, compressedBytes, outputFile);
            }
        } while (stream.avail_out == 0);
    } while (bytesRead > 0);

    deflateEnd(&stream);

    fclose(inputFile);
    fclose(outputFile);

    printf("File compressed successfully.\n");

    return 0;
}

4.将方法暴露出去

为了方便应用调用,我们将Compress函数封装成napi的方法,命名为zipFile。

修改该目录下的index.d.ts文件,导出zipFile方法。

此时,应用只需要配置好依赖,就可以调用zlib的接口了。

5.使用将zlib方法封装成hsp(可选)

为了方便分发、调用,可以将暴露出去的方法封装到hsp中。

创建一个myzlib的hsp,重复1-4章节。

6.应用调用

在业务模块的oh-package.json5中,配置对hsp的依赖

Snipaste_2024-10-23_10-00-08.jpg

导入相应模块

Snipaste_2024-10-23_10-00-45.jpg

注意需要配置multi-deploy,将hsp和hap同时安装到设备上。

cke_13731.png

此时调用该方法,即可成功。

cke_16087.png

更多关于HarmonyOS 鸿蒙Next zlib decompressFile解压文件希望显示解压进度的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,如果你希望在使用zlib库进行文件解压时显示解压进度,可以通过以下方式实现。zlib本身没有直接提供显示解压进度的接口,但你可以通过手动计算解压的数据量来模拟进度显示。

  1. 初始化进度变量:在开始解压之前,定义一个变量来存储解压进度,比如int progress = 0

  2. 读取并解压数据:在解压循环中,每次读取一块数据后,计算已解压的数据量,并更新进度变量。例如,如果每次读取chunkSize字节的数据,你可以通过(已解压数据量 / 总数据量) * 100来计算进度百分比。

  3. 显示进度:将计算得到的进度值输出到用户界面或通过日志显示。这取决于你的应用程序如何设计用户交互界面或日志系统。

  4. 处理结束:解压完成后,将进度设置为100%或进行其他结束处理。

请注意,由于zlib库本身并不直接支持进度回调,上述方法需要你自己实现进度计算和显示逻辑。

如果你在实现过程中遇到具体的技术问题,比如数据读取错误或进度计算不准确,可能需要检查你的数据读取逻辑和进度计算公式。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!