HarmonyOS 鸿蒙Next 压缩第一次文件可以正常运行,第二次压缩走不到回调函数里
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
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在第一次文件压缩可以正常运行,但第二次压缩无法进入回调函数的问题,这可能涉及多种原因。以下是一些可能的解决方案:
- 资源释放:在第一次压缩完成后,确保所有相关资源(如文件句柄、内存等)都已被正确释放。资源未释放可能导致第二次压缩时资源冲突或无法访问。
- 回调函数注册:检查第二次压缩时是否重新正确注册了回调函数。若回调函数未注册或注册错误,将无法被调用。
- 系统日志:查看系统日志,特别是与压缩功能相关的日志,可能包含有关错误的详细信息。
- 重启应用:尝试在第一次压缩后重启应用,看是否能解决第二次压缩无法进入回调函数的问题。
- 代码审查:仔细审查与压缩功能相关的代码逻辑,确保没有逻辑错误或资源管理不当的地方。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。