Error handling 以字符串形式获取文件名
我正在尝试使用以下代码获取给定字符串的文件名:Error handling 以字符串形式获取文件名,error-handling,rust,compiler-errors,path,filenames,Error Handling,Rust,Compiler Errors,Path,Filenames,我正在尝试使用以下代码获取给定字符串的文件名: fn获取\u文件名()->结果{ let file=“folder/file.text”; 让path=path::new(文件); 让filename=path.file_name()?.to_str()?; println!(“{}”,文件名); 好(()) } 但我得到了这个错误: error[E0277]:`?`无法将错误转换为`std::io::error'` 原始代码不想返回结果,但这是使用?的唯一方法。如何解决此问题?同时返回选项
fn获取\u文件名()->结果{
let file=“folder/file.text”;
让path=path::new(文件);
让filename=path.file_name()?.to_str()?;
println!(“{}”,文件名);
好(())
}
但我得到了这个错误:
error[E0277]:`?`无法将错误转换为`std::io::error'`
原始代码不想返回
结果
,但这是使用?
的唯一方法。如何解决此问题?同时返回选项。在None
变量上使用?
运算符来转换为Err
是一项实验性功能(请参阅)。如果您想使用<代码> 运算符,可以考虑在这里返回“代码> >选项<代码>或手动解包结果。< P> < <代码> >文件名()/代码>和<代码> .toScript()/代码>此处返回<代码>选项< /代码>。在None
变量上使用?
运算符来转换为Err
是一项实验性功能(请参阅)。如果你想使用<代码> 运算符,你可以考虑返回<代码>选项<代码>,或者用手解开结果。基于尼克拉斯的答案是:
fn filename() -> Option<()> {
let file = "hey.text";
let path = Path::new(file);
let filename = path.file_name()?.to_str()?;
println!("{}",filename);
None
}
fn filename()->选项{
让file=“hey.text”;
让path=path::new(文件);
让filename=path.file_name()?.to_str()?;
println!(“{}”,文件名);
没有一个
}
根据Niklas的回答,以下是答案:
fn filename() -> Option<()> {
let file = "hey.text";
let path = Path::new(file);
let filename = path.file_name()?.to_str()?;
println!("{}",filename);
None
}
fn filename()->选项{
让file=“hey.text”;
让path=path::new(文件);
让filename=path.file_name()?.to_str()?;
println!(“{}”,文件名);
没有一个
}