昨天开始学习 Rust,所以我是一个完全的新手。我想为 linux 制作一个命令行程序作为我的第一个项目。我想要它,所以当您运行程序时,它会检查配置目录
~/.config/my_program/config.toml
是否存在。如果它这样做,它会从 toml 文件加载设置(我可能会为此发布另一篇文章),但如果它不存在,它会创建它并将默认设置放入 toml.
这是我目前所拥有的:
use toml;
use std::io::prelude::*;
use std::path::Path;
fn main() {
let config_path = "~/.config/my_program/config.toml";
//checks if the director exists
let config_exists = Path::new(config_path).exists();
println!("{}", config_exists);
if !config_exists {
let default_config = "place_holder";
match std::fs::create_dir_all("~/.config/my_program"){ //If it doesn't exist it creates the directory
Err(error) => panic!("Couldn't create config directory: {}", error),
Ok(file) => file,
};
let mut config = match std::fs::File::create(config_path){ //Creates the file itself
Err(error) => panic!("couldn't create config file: {}", error),
Ok(file) => file,
};
match config.write_all(default_config.as_bytes()){ //Writes the default config to the file
Err(error) => panic!("Couldn't write defualt config to file: {}", error),
Ok(_) => println!("Config file created at: {}\nEdit it in order to change some setings.", config_path),
};
}
}
但似乎没有什么能很好地与
~
引用主目录。
基本上我在这里需要的是获取正在运行程序的用户并传入完整目录:
"/home/user/.config/my_program/config.toml"
.
我已经用
users::get_current_username().unwrap()
试过了,但是它返回了一个 0sString ,它不能轻易地与普通 &str 组合并作为参数传入。
因此,要么学习如何将 0sString 转换为 &str,要么尝试一种全新的方法。
提前感谢大家!