在Rust中以字符串形式获取文件名



我正在尝试使用以下代码获取给定字符串的文件名:

fn get_filename() -> Result<(), std::io::Error> {
let file = "folder/file.text";
let path = Path::new(file);
let filename = path.file_name()?.to_str()?;
println!("{}",filename);
Ok(())
}

但我得到了这个错误:

error[E0277]: `?` couldn't convert the error to `std::io::Error`

原始代码不希望返回Result,但这是使用?的唯一方法。我该怎么解决这个问题?

根据Niklas的回答,这里是答案:

fn filename() -> Option<()> {
let file = "hey.text";
let path = Path::new(file);
let filename = path.file_name()?.to_str()?;
println!("{}",filename);
None
}

此处的.file_name().to_str()都返回一个Option。在None变体上使用?运算符转换为Err是一个实验特性(请参阅NoneError文档(。如果要使用?运算符,可以考虑在此处返回Option<()>或手动展开结果。

相关内容

  • 没有找到相关文章

最新更新