zip4cj
介绍
zip4cj 是基于仓颉语言实现的文件压缩和解压缩,目前基本实现了zip 的压缩和解压缩。
特性
- 🚀 zip 压缩和解压缩。
未来规划
-
实现压缩解密和加密
-
支持压缩和解压进度监控
架构
源码目录
shell
.
├── LICENSE
├── README.md
├── doc
│ ├── assets
│ └── cjcov
├── src // 源码
│ ├── crypto // 加解密功能包
│ │ ├── engine
│ │ └── PBKDF2
│ ├── exception // 异常类包
│ ├── headers // zip文件头包
│ ├── io // zip IO流包
│ │ ├── inputstream
│ │ └── outputstream
│ ├── model // zip 配置和参数模式包
│ │ └── enums
│ ├── progress // 进度监控包
│ ├── tasks // 支持多种压缩和解压缩方式包
│ ├── util // 工具包
│ └── zip_file.cj // 主程序入口类
└── test
├── HLT
├── LLT
└── UT
doc
存放库的设计文档、提案、库的使用文档、LLT 覆盖率报告src
是库源码目录test
存放测试用例,包括 HLT 用例、LLT 用例和 UT 用例
类和接口说明:
详情见 API
使用说明
编译
cj
cjpm update
cjpm build
功能示例
zip 解压
cj
import zip4cj.* // 引入zip4cj包
import std.os.posix.*
import std.fs.*
import std.sync.*
import std.time.*
main() {
let zipFile = ZipFile("MobaXtermbackup.zip") // 创建ZipFile类
zipFile.setRunInThread(false) // 设置是否用子线程运行任务
zipFile.extractAll("./output") // 解压到 output 文件夹, 文件夹不存在则创建
0
}
zip 创建zip文件
cj
import zip4cj.* // 引入zip4cj包
import std.os.posix.*
import std.fs.*
import std.sync.*
import std.time.*
main() {
let zipParameters = ZipParameters() // 创建 zip 参数配置 类
zipParameters.setCompressionMethod(CompressionMethod.STORE) // 设置压缩方式为存储
let zipFile = ZipFile("output.zip") // 创建ZipFile类, 并指定文件为 output.zip
let files = [ // 创建 文件集合
Path("123.txt")
]
zipFile.createSplitZipFile(files, zipParameters, false, InternalZipConstants.MIN_SPLIT_LENGTH) // 创建文件
return 0
}
压缩文件夹
cj
import zip4cj.* // 引入zip4cj包
import std.os.posix.*
import std.fs.*
import std.sync.*
import std.time.*
main() {
let zipParameters = ZipParameters() // 创建 zip 参数配置 类
zipParameters.setCompressionMethod(CompressionMethod.DEFLATE) // 设置压缩方式为DEFLATE压缩
let zipFile = ZipFile("output.zip") // 创建ZipFile类, 并指定文件为 output.zip
zipFile.addFolder("test") // 添加文件夹压缩
return 0
}
在zip文件中重命名/删除/添加文件
cj
import zip4cj.* // 引入zip4cj包
import std.os.posix.*
import std.fs.*
import std.sync.*
import std.time.*
main() {
let zipParameters = ZipParameters() // 创建 zip 参数配置 类
zipParameters.setCompressionMethod(CompressionMethod.DEFLATE) // 设置压缩方式为DEFLATE压缩
let zipFile = ZipFile("output.zip") // 创建ZipFile类, 并指定文件为 output.zip
zipFile.removeFile("a.txt") // 删除文件
zipFile.renameFile("old_file", "new_file") // 重命名文件
zipFile.addFile(Path("a.txt"), parameters: zipParameters) // 添加文件
var paths=[
Path("1.mp3")
Path("12.mp3")
Path("123.mp3")
Path("1234.mp3")
]
zipFile.addFiles(paths, parameters: zipParameters) // 添加文件集合
return 0
}
DD一下: 欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。
erlang
`欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案)
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
zlib4cj
简介
本仓库是使用仓颉语言重写 zlib 库,参考 github.com/madler/zlib...
特性
- 🚀 支持压缩和解压功能
- 💪 支持流式压缩
架构
源码目录:
shell
.
├── README.md
├── doc
│ ├── assets
│ ├── cjcov
│ ├── design.md
│ ├── feature_api.md
├── src
│ └── deflate.cj
│ └── inflate.cj
│ └── stream.cj
│ └── zlib.cj
│ └── zutil.cj
└── test
├── HLT
├── LLT
└── UT
doc
存放库的设计文档、提案、库的使用文档、LLT 用例覆盖报告src
存放库源码的目录test
存放测试用例,包括 HLT 用例、LLT 用例和 UT 用例
类和接口说明:
详情见 API
使用说明
编译
cj
cjpm build
功能示例
zlib 使用示例
cj
import zlib4cj.*
import std.collection.*
import std.io.*
import std.os.posix.*
import std.fs.*
main() {
var path: String = getcwd()
var fileName: String = "${path}/README.md"
var data: Array<UInt8> = readFile(fileName)
// wrap: ZLIB success
if(testCompressAndUncompress(data) != 0) {
return -1
}
return 0
}
func testCompressAndUncompress(data: Array<UInt8>): Int64 {
let buf: ArrayList<UInt8> = Zlib.compress(data, wrap: ZLIB)
let arr: Array<UInt8> = Array<UInt8>(buf.size, { i => buf[i] })
let result: ArrayList<UInt8> = Zlib.uncompress(arr, wrap: ZLIB)
return checkResult(data, result, "testCompressAndUncompress")
}
func readFile(path: String): Array<UInt8> {
var data = Array<UInt8>()
var fs = File(path, OpenOption.Open(true, false) )
var readnum: Int64 = 0
if (fs.canRead()) {
data = fs.readToEnd()
}
return data
}
func compareBuffer(input: Array<UInt8>, uncompr: ArrayList<UInt8>): Bool {
if (input.size != uncompr.size) {
return false
}
for (i in 0..input.size) {
if (input[i] != uncompr[i]) {
return false
}
}
return true
}
func checkResult(input: Array<UInt8>, uncompr: ArrayList<UInt8>, desc: String): Int64 {
if (compareBuffer(input, uncompr)) {
return 0
} else {
return -1
}
}
运行结果如下:
0
约束与限制
在下述版本验证通过:
cj
Cangjie Version: 0.53.4