filetime
(由Vladimir Matveev指出)。需要注意的是,该crate中的FileTime::seconds
方法是平台特定的。MetadataExt
方面,它不是实验性的,而是稳定的。只是碰巧它是平台特定的。MetadataExt
实际上是一个误导。真正的问题在于,rustdoc
是编译器的一种后处理过程,插入在类型检查完成后。这使得它在宏展开之后执行。这很重要,因为正是在宏展开期间解析平台特定的#[cfg(...)]
属性。这一点很重要,因为这是语言处理平台特定代码的方式。std::os::windows::fs::MetadataExt
,它看起来像这样:pub trait MetadataExt {
fn file_attributes(&self) -> u32;
fn creation_time(&self) -> u64;
fn last_access_time(&self) -> u64;
fn last_write_time(&self) -> u64;
fn file_size(&self) -> u64;
}
(由于明显的原因,我不能仅仅提供此链接。)
顺便说一下,您提供的不是RFC; 它是RFC存储库上的问题。它用于跟踪应编写RFC的事项。
因此,为了总结这一切:您可以使用上述垫片或者编写特定于平台的代码,这很可能会归结为Windows的一个路径和其他所有内容的一个路径,使用两个不同的 MetadataExt 特征。要注意的一件事是,这两个系统使用不同的时期,这意味着时间不能直接进行比较。UNIX使用1970年1月1日的时期,Windows使用1601年1月1日。
最简单的方法可能只是使用上面提到的垫片。
Metadata::modified
方法用于获取修改时间。Metadata::modified
返回一个 SystemTime
,它需要使用 UNIX_EPOCH
作为时间锚点来了解有关 SystemTime
的信息,因为“无法直接检查 SystemTime
”。因此,Metadata::modified
不是跨平台的。 - Sylvester Kruinuse std::fs;
use std::time::UNIX_EPOCH;
pub fn file_modified_time_in_seconds(path: &str) -> u64 {
fs::metadata(path)
.unwrap()
.modified()
.unwrap()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_secs()
}