wzv5 / libpck

纯C++、跨平台的诛仙pck文件包处理工具
MIT License
14 stars 8 forks source link

libpck

Build status

这是一个跨平台的、纯C++实现的、基于最新C++11、14标准(包括部分C++17标准)的诛仙pck文件包处理库。

特点:

我写这个库的目的是,复习C++,同时练习掌握最新的C++标准,所以尽可能使用最新的C++标准来完成,避免使用操作系统相关的API。

代码中大量使用C++异常机制,由于我之前写过C#、Python,还是很喜欢用异常机制的,不过可能大部分只写C++的人不习惯这种用法,对此我也只能说,慢慢习惯吧,这是个好东西!

虽然这是一个练习性质的作品,但我依然努力让它更稳定、更好用,同时也会一直维护下去。

下载

已编译的dll及易语言模块:https://github.com/wzv5/libpck/releases/latest

编译

由于使用了最新的C++标准,所以编译器也必须用最新的。

本代码在 VS2015、VS2017、GCC 5.3(Arch Linux)测试通过,低于此版本的编译器可能会出错。

使用 VS2017 编译

使用 vcpkg 管理第三方依赖,请自行安装 vcpkg,并安装它的 VS integrate

vcpkg install zlib:x86-windows-static
vcpkg install zlib:x64-windows-static

打开 libpck.sln,其中包含以下项目:

使用 boost 代替 C++17 标准库中的 filesystem

默认使用 C++17 标准库中的 filesystem(还处于试验阶段),如果想要使用 boost,可以 #define USE_BOOST ,同时在项目属性中添加 boost 的相关目录。

使用

推荐使用C++接口,只需要 #include "pckfile.h" 即可,可选 #include "pckitem.h"

同时提供了C接口,#include "pckfile_c.h",但不推荐使用,因为这降低了安全性,且不支持异常机制。

还提供有易语言接口,参考 ELanguageInterface 目录中的 libpck.epcktest.e

C++接口使用示例:

// 打开pck文件
auto pck = PckFile::Open("xxx.pck");
// 获取文件对象
auto& item = pck->GetSingleFileItem("文件名");
// 获取文件数据
auto data = item.GetData();
// 解压整个pck
pck->Extract("X:\\...\\解压目录");

// 从目录创建pck
PckFile::CreateFromDirectory("xxx.pck", "X:\\...");
// 重建pck(清除冗余数据)
PckFile::ReBuild("old.pck", "new.pck");

已知问题

https://github.com/wzv5/libpck/issues

以后的打算

感谢

stsm/liqf/李秋枫 开源的 WinPCK,我参考了其中pck文件结构的定义,但由于他的代码是针对UI设计的,层层耦合较强,接口复杂,不易分离使用,所以我才决定完全重写一个只实现pck核心逻辑的库。

License

MIT