本示例介绍在Worker子线程使用@ohos.zlib提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作,解压成功后将解压路径返回主线程,获取解压文件列表。
使用说明
const workerPort: ThreadWorkerGlobalScope = worker.workerPort;
"buildOption": {
"sourceOption": {
"workers": [
"./src/main/ets/workers/Worker.ets"
]
}
}
let workerInstance: worker.ThreadWorker = new worker.ThreadWorker('@decompressFile/ets/workers/Worker.ets');
workerInstance.postMessage({ pathDir: this.pathDir, rawfileZipName: rawfileZipName });
workerPort.onmessage = (e: MessageEvents): void => {
logger.info(TAG, `Worker onmessage:${JSON.stringify(e.data)}`);
let pathDir: string = e.data.pathDir; // 沙箱目录
let rawfileZipName: string = e.data.rawfileZipName; // 带.zip后缀的压缩文件名称
}
fs.access(outFileDir).then((res: boolean) => {
if (!res) {
// TODO:知识点:使用fs.mkdirSync创建目录,用于存放解压后的文件。
fs.mkdirSync(outFileDir);
logger.info(TAG, 'mkdirSync succeed');
}
// TODO:知识点:使用zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作,解压至指定沙箱目录outFileDir。
// 如果待解压的文件或文件夹在解压后的路径下已经存在,则会直接覆盖同名文件或同名文件夹中的同名文件。
zlib.decompressFile(`${pathDir}/${rawfileZipName}`, outFileDir, (errData: BusinessError) => {
if (errData !== null) {
logger.error(TAG, `decompressFile failed. code is ${errData.code}, message is ${errData.message}`);
} else {
logger.info(TAG, `decompressFile succeed. outFileDir is ${outFileDir}`);
// TODO:知识点:Worker线程向主线程发送信息。
workerPort.postMessage(outFileDir);
}
})
}).catch((err: BusinessError) => {
logger.error(TAG, `access failed with error message: ${err.message}, error code: ${err.code}`);
});
decompressFile // har类型
|---/src/main/ets/model
| |---FileListDataSource.ets // 数据模型层-列表数据模型
| |---FileItemModel.ets // 数据模型层-列表项数据模型
|---/src/main/ets/view
| |---MainPage.ets // 视图层-场景列表页面
|---/src/main/ets/workers
| |---Worker.ets // Worker线程
https://qr21.cn/FV7h05
本示例介绍在Worker子线程使用@ohos.zlib提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作,解压成功后将解压路径返回主线程,获取解压文件列表。