rust main fn read dir结果错误无法编译

rust main fn read dir结果错误无法编译,rust,readfile,Rust,Readfile,我是rust的新手,正在尝试一个例子来阅读Win10上的dir: 但是,由于返回结果需要2个类型参数,因此代码无法编译: std::io::Error std::time::SystemTimeError 使用std::fs; fn main()->结果{ 让当前_dir=“C:/temp/”; 普林顿( “过去24小时内在{:?}中修改的条目:”, 当前目录 ); 对于fs::read_dir(当前_dir)中的条目{ 让进入=进入?; 让path=entry.path(); 让met

我是rust的新手,正在尝试一个例子来阅读Win10上的dir:

但是,由于返回结果需要2个类型参数,因此代码无法编译:

std::io::Error  
std::time::SystemTimeError
使用std::fs;
fn main()->结果{
让当前_dir=“C:/temp/”;
普林顿(
“过去24小时内在{:?}中修改的条目:”,
当前目录
);
对于fs::read_dir(当前_dir)中的条目{
让进入=进入?;
让path=entry.path();
让metadata=fs::metadata(&path)?;
让last_modified=metadata.modified()?.appeased()?.as_secs();
如果上次修改<24*3600&&metadata.is\u文件(){
普林顿(
“上次修改:{:?}秒,为只读:{:?},大小:{:?}字节,文件名:{:?}”,
上次修改时,
metadata.permissions().readonly(),
metadata.len(),
path.file_name()。确定还是(“无文件名”)?
);
}
}
好(())
}
这里是游乐场链接:

如果单击代码段右上角的“展开”按钮,您将看到默认情况下隐藏的位:

使用错误链::错误链;
使用std::{env,fs};
错误链!{
国外链接{
Io(标准::Io::错误);
SystemTimeError(标准::时间::SystemTimeError);
}
}
fn main()->结果{
// ...
这些位非常相关,因为默认情况下,错误链!只需指定“Ok”参数,另一个是生成的错误类型(类似于
std::io::Result
,它是
std::Result::Result
的类型定义)

因此,您需要在复制代码段之前展开该代码段(
error\u chain
在操场上可用),或者手动滚动
Result
alias…以及可能的错误类型,尽管在这里您可以定义
type Result=Result
,它应该可以工作

(烹饪书的)这种行为在about页面的部分有解释,尽管我不能说我喜欢它,因为烹饪书通常不是你从头到尾读的东西。

我已经将其更改为:fn main()->Result
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(())
}