移动路径后,如何重命名给定路径的文件?

  • 本文关键字:路径 文件 移动 重命名 rust
  • 更新时间 :
  • 英文 :


我正在尝试重命名一个名为settings.ron->setting.invalid.ron的文件,给定settings.ron的路径可能会根据环境而变化。

path的值已经在File读取操作中借用时,我在移动的值时遇到了麻烦。

impl Settings {
pub fn load() -> Self {
let path = Settings::get_settings_path();
if let Ok(file) = fs::File::open(path) {
match ron::de::from_reader(file) {
Ok(x) => x,
Err(e) => {
log::warn!("Failed to parse setting file! Fallback to default. {}", e);
path.with_file_name("settings.invalid.ron");
}
}
}
let default_settings = Self::default();
default_settings.save_to_file_warn();
default_settings
}
}

我让它工作了,但必须创建一个额外的变量似乎很奇怪:

impl Settings {
pub fn load() -> Self {
let path = Settings::get_settings_path();
let mut path_buf = path.to_owned();
if let Ok(file) = fs::File::open(path) {
match ron::de::from_reader(file) {
Ok(x) => x,
Err(e) => {
log::warn!("Failed to parse setting file! Fallback to default. {}", e);
path_buf.set_file_name("settings.invalid.ron");
}
}
}
let default_settings = Self::default();
default_settings.save_to_file_warn();
default_settings
}
}

正如Sven Marnach所说,诀窍是传递对File::open()的引用:

impl Settings {
pub fn load() -> Self {
let mut path = Settings::get_settings_path();
if let Ok(file) = fs::File::open(&path) {
match ron::de::from_reader(file) {
Ok(x) => x,
Err(e) => {
log::warn!("Failed to parse setting file! Fallback to default. {}", e);
// Rename the corrupted settings file
let mut new_path = path.to_owned();
new_path.pop();
new_path.push("settings.invalid.ron");
if let Err(err) = std::fs::rename(path, new_path) {
log::warn!("Failed to rename settings file. {}", err);
}
}
}
}
let default_settings = Self::default();
default_settings.save_to_file_warn();
default_settings
}
}

最新更新