#steam #directory #vdf #appmanifest #steamapps

steamlocate

Rust 库,用于定位 Steam 游戏安装目录(以及 Steam 本身!)

17 个版本 (7 个稳定版)

2.0.0-beta.22023年12月23日
2.0.0-alpha.02023年3月29日
1.2.1 2023年4月23日
1.1.1 2023年1月21日
0.1.3 2021年2月22日

#1 in 游戏

Download history 636/week @ 2024-04-24 609/week @ 2024-05-01 375/week @ 2024-05-08 409/week @ 2024-05-15 252/week @ 2024-05-22 408/week @ 2024-05-29 530/week @ 2024-06-05 530/week @ 2024-06-12 443/week @ 2024-06-19 640/week @ 2024-06-26 451/week @ 2024-07-03 608/week @ 2024-07-10 382/week @ 2024-07-17 409/week @ 2024-07-24 592/week @ 2024-07-31 557/week @ 2024-08-07

1,971 每月下载次数
20 个crate中(13 个直接使用) 使用

MIT 许可证

66KB
1.5K SLoC

crates.io docs.rs license Workflow Status

steamlocate

一个库,能够高效地定位文件系统中的任何 Steam 应用程序,以及/或 Steam 安装本身。

当您不希望程序依赖于 Steamworks API 时,最好使用此库。在某些情况下,可能更适合使用 Steamworks API,在这种情况下,我推荐出色的 steamworks 库。您不需要成为 Steamworks 合作伙伴即可从 Steamworks API 获取安装目录位置。

使用 steamlocate

只需使用 cargo 添加 steamlocate 即可。

$ cargo add steamlocate

功能标志

默认: locate

功能标志 描述
locate 启用在支持的平台上自动检测 Steam 安装(目前为 Windows、MacOS 和 Linux)。不支持的平台将返回运行时错误。

示例

定位 Steam 安装和特定游戏

SteamDir 将是您进入 API 的入口点。找到它后,您可以访问相关信息的任何部分。

let steam_dir = steamlocate::SteamDir::locate()?;
println!("Steam installation - {}", steam_dir.path().display());
// ^^ prints something like `Steam installation - C:\Program Files (x86)\Steam`

const GMOD_APP_ID: u32 = 4_000;
let (garrys_mod, _lib) = steam_dir
    .find_app(GMOD_APP_ID)?
    .expect("Of course we have G Mod");
assert_eq!(garrys_mod.name.as_ref().unwrap(), "Garry's Mod");
println!("{garrys_mod:#?}");
// ^^ prints something like vv
App {
    app_id: 4_000,
    install_dir: "GarrysMod",
    name: Some("Garry's Mod"),
    universe: Some(Public),
    // much much more data
}

获取系统上所有库和应用的概览

您可以从 steam 目录迭代所有 Steam 的库。然后,从每个库中迭代所有其应用。

let steam_dir = steamlocate::SteamDir::locate()?;

for library in steam_dir.libraries()? {
    let library = library?;
    println!("Library - {}", library.path().display());

    for app in library.apps() {
        let app = app?;
        println!("    App {} - {:?}", app.app_id, app.name);
    }
}

在我的笔记本电脑上,这会打印

Library - /home/wintermute/.local/share/Steam
    App 1628350 - Steam Linux Runtime 3.0 (sniper)
    App 1493710 - Proton Experimental
    App 4000 - Garry's Mod
Library - /home/wintermute/temp steam lib
    App 391540 - Undertale
    App 1714040 - Super Auto Pets
    App 2348590 - Proton 8.0

贡献

除非您明确声明,否则您提交的任何有意包含在本作品中的贡献,根据 MIT 许可证定义,均应按上述方式许可,不附加任何其他条款或条件。

依赖项

~2–13MB
~109K SLoC