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解析器实现

Download history 42/week @ 2024-05-12 68/week @ 2024-05-19 60/week @ 2024-05-26 32/week @ 2024-06-02 25/week @ 2024-06-09 9/week @ 2024-06-16 8/week @ 2024-07-14 94/week @ 2024-07-21 28/week @ 2024-07-28 13/week @ 2024-08-04

每月143 次下载

MIT/Apache

185KB
4K SLoC

nod 构建状态 最新版本 Api Rustdoc Rust 版本

用于遍历和读取任天堂光碟(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 许可证定义的,您有意提交供作品包含的贡献,将按照上述双重许可方式授权,不附加任何额外条款或条件。

依赖项

~6–8MB
~211K SLoC