我正在尝试使用以下代码获取给定字符串的文件名:
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<()>
或手动展开结果。