rust main fn read dir 结果错误无法编译
rust main fn read dir result error cannot compile
我是 Rust 的新手,正在尝试一个例子来读取 Win10 上的目录:
https://rust-lang-nursery.github.io/rust-cookbook/file/dir.html
但是代码无法编译,因为 return 结果需要 2 个类型参数:
std::io::Error
std::time::SystemTimeError
use std::fs;
fn main() -> Result<()> {
let current_dir = "C:/temp/";
println!(
"Entries modified in the last 24 hours in {:?}:",
current_dir
);
for entry in fs::read_dir(current_dir)? {
let entry = entry?;
let path = entry.path();
let metadata = fs::metadata(&path)?;
let last_modified = metadata.modified()?.elapsed()?.as_secs();
if last_modified < 24 * 3600 && metadata.is_file() {
println!(
"Last modified: {:?} seconds, is read only: {:?}, size: {:?} bytes, filename: {:?}",
last_modified,
metadata.permissions().readonly(),
metadata.len(),
path.file_name().ok_or("No filename")?
);
}
}
Ok(())
}
这里是游乐场link:
如果您单击代码段右上角的 "expand" 按钮,您会看到默认情况下隐藏的位:
use error_chain::error_chain;
use std::{env, fs};
error_chain! {
foreign_links {
Io(std::io::Error);
SystemTimeError(std::time::SystemTimeError);
}
}
fn main() -> Result<()> {
// ...
这些位非常相关,因为默认情况下 error_chain! automatically generates a Result
alias这样只需要指定"Ok"参数,另一个就是生成的错误类型(类似于std::io::Result
,是std::result::Result<T, std::io::Error>
的typedef)。
所以你需要在复制之前展开代码片段(error_chain
在 playground 上可用)或者手动滚动 Result
别名...和可能的错误类型,虽然在这里你可以只需定义 type Result<T> = Result<T, Box<dyn std::error::Error>>
就可以了。
这种(食谱的)行为在关于页面的 a note about error handling 部分进行了解释,但我不能说我喜欢它,因为食谱通常不是您从头到尾阅读的东西.
我是 Rust 的新手,正在尝试一个例子来读取 Win10 上的目录:
https://rust-lang-nursery.github.io/rust-cookbook/file/dir.html
但是代码无法编译,因为 return 结果需要 2 个类型参数:
std::io::Error
std::time::SystemTimeError
use std::fs;
fn main() -> Result<()> {
let current_dir = "C:/temp/";
println!(
"Entries modified in the last 24 hours in {:?}:",
current_dir
);
for entry in fs::read_dir(current_dir)? {
let entry = entry?;
let path = entry.path();
let metadata = fs::metadata(&path)?;
let last_modified = metadata.modified()?.elapsed()?.as_secs();
if last_modified < 24 * 3600 && metadata.is_file() {
println!(
"Last modified: {:?} seconds, is read only: {:?}, size: {:?} bytes, filename: {:?}",
last_modified,
metadata.permissions().readonly(),
metadata.len(),
path.file_name().ok_or("No filename")?
);
}
}
Ok(())
}
这里是游乐场link:
如果您单击代码段右上角的 "expand" 按钮,您会看到默认情况下隐藏的位:
use error_chain::error_chain;
use std::{env, fs};
error_chain! {
foreign_links {
Io(std::io::Error);
SystemTimeError(std::time::SystemTimeError);
}
}
fn main() -> Result<()> {
// ...
这些位非常相关,因为默认情况下 error_chain! automatically generates a Result
alias这样只需要指定"Ok"参数,另一个就是生成的错误类型(类似于std::io::Result
,是std::result::Result<T, std::io::Error>
的typedef)。
所以你需要在复制之前展开代码片段(error_chain
在 playground 上可用)或者手动滚动 Result
别名...和可能的错误类型,虽然在这里你可以只需定义 type Result<T> = Result<T, Box<dyn std::error::Error>>
就可以了。
这种(食谱的)行为在关于页面的 a note about error handling 部分进行了解释,但我不能说我喜欢它,因为食谱通常不是您从头到尾阅读的东西.