5 个版本 (3 个稳定版)
1.1.1 | 2024年3月4日 |
---|---|
1.1.0 | 2024年2月26日 |
1.0.0 | 2024年2月23日 |
0.1.1 | 2021年8月23日 |
0.1.0 | 2021年8月23日 |
#468 在 解析器实现
每月143 次下载
185KB
4K SLoC
nod
用于遍历和读取任天堂光碟(GameCube 和 Wii)镜像的库。
最初基于 C++ 库 nod,但不支持创建。
目前支持的文件格式
- ISO (GCM)
- WIA / RVZ
- WBFS (+ NKit 2 无损)
- CISO (+ NKit 2 无损)
- NFS (Wii U VC)
- GCZ
CLI 工具
此软件包包含一个名为 nodtool
的命令行工具。
info
显示光盘镜像的信息。
nodtool info /path/to/game.iso
extract
将光盘镜像的内容提取到目录中。
nodtool extract /path/to/game.iso [outdir]
对于 Wii U VC 标题,使用 content/hif_000000.nfs
nodtool extract /path/to/game/content/hif_000000.nfs [outdir]
convert
将任何支持的格式转换为原始 ISO。
nodtool convert /path/to/game.wia /path/to/game.iso
verify
对光盘镜像的内容进行哈希并验证。
nodtool verify /path/to/game.iso
库示例
打开光盘镜像并读取文件
use std::io::Read;
// Open a disc image and the first data partition.
let disc = nod::Disc::new("path/to/file.iso")
.expect("Failed to open disc");
let mut partition = disc.open_partition_kind(nod::PartitionKind::Data)
.expect("Failed to open data partition");
// Read partition metadata and the file system table.
let meta = partition.meta()
.expect("Failed to read partition metadata");
let fst = meta.fst()
.expect("File system table is invalid");
// Find a file by path and read it into a string.
if let Some((_, node)) = fst.find("/MP3/Worlds.txt") {
let mut s = String::new();
partition
.open_file(node)
.expect("Failed to open file stream")
.read_to_string(&mut s)
.expect("Failed to read file");
println!("{}", s);
}
将光盘镜像转换为原始 ISO
// Enable `rebuild_encryption` to ensure the output is a valid ISO.
let options = nod::OpenOptions { rebuild_encryption: true, ..Default::default() };
let mut disc = nod::Disc::new_with_options("path/to/file.rvz", &options)
.expect("Failed to open disc");
// Read directly from the open disc and write to the output file.
let mut out = std::fs::File::create("output.iso")
.expect("Failed to create output file");
std::io::copy(&mut disc, &mut out)
.expect("Failed to write data");
许可协议
许可协议为以下之一
- Apache 许可协议第 2.0 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交供作品包含的贡献,将按照上述双重许可方式授权,不附加任何额外条款或条件。
依赖项
~6–8MB
~211K SLoC