在Rust中,我应该把我的配置文件保存在哪里?

6

我需要持久化信息,比如用户的配置和输入。在Linux和Windows上,最好的保存位置是哪里?

这是为一个rust-cargo程序准备的,它将被安装到~/.cargo/bin中使用。我尝试将我的文件保存在~/.cargo中,但我不知道是否合适,因为我对Rust还不熟悉。


2
有几个库提供类似于用户配置常用的 XDG 路径,例如 https://github.com/soc/directories-rs。这是您正在寻找的吗? - Denys Séguret
如果在Rust中没有标准的位置可用,我会使用它,但我更喜欢自己管理它们,而不是依赖另一个库。 - Mario Codes
1
没有理由因为应用程序是用Rust编写的就需要另一个标准。如果您不想使用库,那么只需读取$XDG_CONFIG_HOME环境变量即可。这些库大多用于回退、Windows兼容性等方面。 - Denys Séguret
可能是Linux/Unix中ini/config文件的位置?的重复问题。 - trent
我还添加了Windows标签,因为我的问题是针对Linux的,但我也会对未来参考的Windows答案感兴趣。 - Mario Codes
显示剩余3条评论
1个回答

10

使用Rust编写的应用程序并没有什么特别之处。与其他带有运行时的解决方案不同,Rust构建依赖于标准环境和惯例的普通应用程序。配置位置遵循系统的常规规则。

在Linux上,您应首先查询XDG路径,然后在无法使用时使用$HOME作为后备。

以下是如何执行此操作:

use std::env::var;

fn main() {
    let config_home = var("XDG_CONFIG_HOME")
        .or_else(|_| var("HOME").map(|home|format!("{}/.config", home)));
    println!("{:?}", config_home);
}

请注意,有几个库可以为您完成此任务,并负责支持备用操作系统。

我不会链接它们,因为它们很多并且经常更改,但如果您搜索“rust配置目录”,您最喜欢的搜索引擎将指向最受欢迎的库。


我想补充一下,这适用于货物扩展或货物分发的二进制文件(这些是我期望放置在~./cargo/bin/中的唯一文件)。可以将其与例如ripgreprustfmt的处理方式进行比较。 - Sty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接