HarmonyOS 鸿蒙Next 压缩第一次文件可以正常运行,第二次压缩走不到回调函数里

发布于 1周前 作者 htzhanglong 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 压缩第一次文件可以正常运行,第二次压缩走不到回调函数里

import fs, { ListFileOptions } from ‘@ohos.file.fs’;
import { BusinessError, zlib } from ‘@kit.BasicServicesKit’;

@Entry @Component struct test { fileToZip(inFile: string, outFile: string, callback: Function) { let options: zlib.Options = { level: zlib.CompressLevel.COMPRESS_LEVEL_DEFAULT_COMPRESSION, memLevel: zlib.MemLevel.MEM_LEVEL_DEFAULT, strategy: zlib.CompressStrategy.COMPRESS_STRATEGY_DEFAULT_STRATEGY }; try { zlib.compressFile(inFile, outFile, options, (errData) => { if (errData !== null) { console.log(errData is errCode:${errData.code} message:${errData.message}); } else { callback() } }) } catch (errData) { console.log(errData is errCode:${errData.code} message:${errData.message}); } }

/** * 删除日志 */ deleteLog(filePath: string) { fs.access(filePath).then((res: ESObject) => { if (res) { fs.unlinkSync(filePath); } }).catch((err: BusinessError) => { }) }

build() { Button(‘测试压缩’).margin({ top: 50 }).onClick(() => { this.deleteLog(’/data/storage/el2/base/files/public/public.zip’) this.fileToZip(’/data/storage/el2/base/files/public’, ‘/data/storage/el2/base/files/public/public.zip’, () => { console.log(‘test11111’) }) }) } }


更多关于HarmonyOS 鸿蒙Next 压缩第一次文件可以正常运行,第二次压缩走不到回调函数里的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
参考demo:

import fs, { ListFileOptions } from '@ohos.file.fs';
import { BusinessError, zlib } from '@kit.BasicServicesKit';
const context = getContext(this)
[@Entry](/user/Entry)
[@Component](/user/Component)
struct test{
fileToZip(inFile: string, outFile: string, callback: Function) {
let options: zlib.Options = {
level: zlib.CompressLevel.COMPRESS_LEVEL_DEFAULT_COMPRESSION,
memLevel: zlib.MemLevel.MEM_LEVEL_DEFAULT,
strategy: zlib.CompressStrategy.COMPRESS_STRATEGY_DEFAULT_STRATEGY
};
try {
zlib.compressFile(inFile, outFile, options, (errData) => {
if (errData !== null) {
console.log(`errData is errCode:${errData.code} message:${errData.message}`);
}else{
callback()
}
})
} catch (errData) {
console.log(`errData is errCode:${errData.code} message:${errData.message}`);
}
}
/**
* 删除日志
*/
deleteLog(filePath: string, callback: Function) {
fs.access(filePath).then((res: ESObject) => {
if (res) {
console.log('删除成功')
fs.unlinkSync(filePath);

}callback() }).catch((err: BusinessError) => { }) } build(){ Column(){

Button(‘测试压缩’) .margin({ top: 50 }) .onClick(()=>{ this.deleteLog(context.filesDir+"/public/test.zip",()=>{ this.fileToZip(context.filesDir+"/public", context.filesDir+"/public/test.zip",()=>{ console.log(‘test11111’) }) }) }) Button(‘复制zip到沙箱,并解压zip’, { type: ButtonType.Normal, stateEffect: true }) .borderRadius(8) .backgroundColor(0x317aff) .width(90) .height(40) .onClick(() => { /**

  • 通过fd来进行拷贝,避免文件过大的内存占用问题
  • data.fd是hap包的fd,data.offset表示目标文件在hap包中的偏移,data.length表示目标文件的长度 / context.resourceManager.getRawFd(“test.zip”, (err, data) => { let dirPath = context.filesDir + “/public”; fs.mkdir(dirPath).then(() => { console.info(“mkdir succeed”); }).catch((err: BusinessError) => { console.error("mkdir failed with error message: " + err.message + ", error code: " + err.code); }); let sandboxPath = dirPath console.log(“沙箱路径:” + sandboxPath) //fs.mkdtempSync(sandboxPath + “/cik”) let filePath = context.tempDir + “/test.zip” console.log(“压缩文件路径:” + filePath) let dest = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE) let bufsize = 4096 let buf = new ArrayBuffer(bufsize) let off = 0, len = 0, readedLen = 0 /*
  • 通过buffer将rawfile文件内容copy到沙箱路径 */ while (len = fs.readSync(data.fd, buf, { offset: data.offset + off, length: bufsize })) { readedLen += len fs.writeSync(dest.fd, buf, { offset: off, length: len }) off = off + len if ((data.length - readedLen) < bufsize) { bufsize = data.length - readedLen } } fs.close(dest.fd) // 对沙箱路径下的压缩文件进行解压 zlib.decompressFile(filePath, sandboxPath) context.resourceManager.closeRawFd(“test.zip”) }) }) .width(‘100%’) } } }

更多关于HarmonyOS 鸿蒙Next 压缩第一次文件可以正常运行,第二次压缩走不到回调函数里的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对您提到的HarmonyOS鸿蒙Next在第一次文件压缩可以正常运行,但第二次压缩无法进入回调函数的问题,这可能涉及多种原因。以下是一些可能的解决方案:

  1. 资源释放:在第一次压缩完成后,确保所有相关资源(如文件句柄、内存等)都已被正确释放。资源未释放可能导致第二次压缩时资源冲突或无法访问。
  2. 回调函数注册:检查第二次压缩时是否重新正确注册了回调函数。若回调函数未注册或注册错误,将无法被调用。
  3. 系统日志:查看系统日志,特别是与压缩功能相关的日志,可能包含有关错误的详细信息。
  4. 重启应用:尝试在第一次压缩后重启应用,看是否能解决第二次压缩无法进入回调函数的问题。
  5. 代码审查:仔细审查与压缩功能相关的代码逻辑,确保没有逻辑错误或资源管理不当的地方。

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

回到顶部