HarmonyOS 如何解压gzip到某个文件夹下

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

试试先解压gzip,再解压tar

/**
 * gzip解压
 * @param gzipFilePath 待解压的gzip文件(目录)路径
 * @param filePath 解压到的保存路径
 * @returns 状态返回值
 */
public async uncompressGZipString(gzipFilePath: string, filePath: string): Promise<number> {
  if (!fs.accessSync(gzipFilePath)) {
  return -1
}
if (!fs.accessSync(filePath)) {
  fs.mkdirSync(filePath)
}
let tempFilePath = filePath + File.separator + "temp"
let tempFileName = tempFilePath + ".tar"
this.result = await unGzipFile(gzipFilePath, tempFilePath).then((isSuccess: boolean) => {
  if (!isSuccess) {
    Logger.error(`Failed to decompress the gzip file.`);
    return -1;
  }else {
    this.result = 1
    fs.renameSync(tempFilePath, tempFileName)
    let inputFileStream: InputStream|null = null
    let tais: TarArchiveInputStream|null = null
    try {
      inputFileStream = new InputStream();
      inputFileStream.setFilePath(tempFileName);
      tais = new TarArchiveInputStream(inputFileStream,
        512 * 20, 512, '', false);
      let tae: TarArchiveEntry;
      let len: number = 0;
      while ((tae = tais.getNextTarEntry()) !== null) {
        let f: File = new File(filePath, tae.getName())
        if (tae.isDirectory()) {
          fs.mkdirSync(f.getPath(), true)
        } else {
          let parent: File = f.getParentFile()
          if (!fs.accessSync(parent.getPath())) {
            fs.mkdirSync(parent.getPath(), true)
          }
          let fos: OutputStream = new OutputStream()
          fos.setFilePath(f.getPath())
          let buffer: Int8Array = new Int8Array(tae.getRealSize().toNumber());
          while ((len = tais.readBytes(buffer)) !== -1) {
            fos!.writeBytesOffset(buffer, 0, len);
          }
          fos!.flush();
          fos!.close();
        }
      }
    } catch (e) {
      Logger.error(TAG, "Exception : " + e);
      this.result = -1
    } finally {
      inputFileStream!.close();
      tais!.close();
      fs.unlinkSync(tempFileName)
    }
    return this.result
  }
}).catch((err: BusinessError) => {
  Logger.error(`Failed to decompress the gzip file, error code: ${err.code}, error message: ${err.message}`);
  return -1;
});
return this.result;
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 如何解压gzip格式文件
141浏览 • 1回复 待解决
HarmonyOS 如何使用gzip解压文件
36浏览 • 1回复 待解决
HarmonyOS 如何解压GZIP压缩过的字符串
127浏览 • 1回复 待解决
HarmonyOS 代码如何解压zip文件
176浏览 • 1回复 待解决
HarmonyOS如何解压rawfile中的zip文件
478浏览 • 1回复 待解决
HarmonyOS 下载文件指定文件夹
172浏览 • 1回复 待解决
HarmonyOS gzip压缩和解压缩接口
877浏览 • 1回复 待解决
HarmonyOS 如何解压数据流?
552浏览 • 1回复 待解决
HarmonyOS zlib如何解压内存数据
139浏览 • 1回复 待解决
HarmonyOS 解压gzip格式压缩的数据流
42浏览 • 1回复 待解决