HarmonyOS如何解压rawfile中的zip文件-鸿蒙开发者社区-51CTO.COM

HarmonyOS如何解压rawfile中的zip文件

HarmonyOS如何解压rawfile中的zip文件。

HarmonyOS
2024-09-09 11:40:49
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

可以通过buffer将rawfile文件内容copy到沙箱路径,再对沙箱路径下的压缩文件进行解压。

以下关键代码供参考:

import fs from '@ohos.file.fs'; 
import { Context } from '@ohos.abilityAccessCtrl'; 
import zlib from '@ohos.zlib'; 
@Entry 
@Component 
struct Index { 
  @State context:Context =getContext(this); 
  build() { 
    Row() { 
      Column() { 
        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表示目标文件的长度 
             */ 
            this.context.resourceManager.getRawFd("picture.zip", (err, data) => { 
              let sandboxPath = this.context.filesDir 
              console.log("沙箱路径:" + sandboxPath) 
              fs.mkdtempSync(sandboxPath + "/XXXXXX") 
              let filePath = this.context.tempDir + "/bfpicture.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) 
              this.context.resourceManager.closeRawFd("bfpicture.zip") 
            }) 
          }) 
          .width('100%') 
      } 
      .height('100%') 
    } 
  }}
分享
微博
QQ
微信
回复
2024-09-09 16:23:50
相关问题
rawfilezip复制并解压到沙箱路径
1248浏览 • 1回复 待解决
鸿蒙里如何通过代码解压zip文件
19浏览 • 0回复 待解决
HarmonyOS ZIP文件加密压缩和解压
591浏览 • 1回复 待解决
HarmonyOS 如何解压数据流?
315浏览 • 1回复 待解决
如何解压有密码压缩包
1678浏览 • 0回复 待解决
zip解压是在主线程还是IO线程
1568浏览 • 1回复 待解决
无法读取到hsp模块rawfile文件
1823浏览 • 1回复 待解决