diff --git a/src/basics.md b/src/basics.md
index a5100c7..59178dc 100644
--- a/src/basics.md
+++ b/src/basics.md
@@ -38,6 +38,7 @@
| [Parse string into DateTime struct][ex-parse-datetime] | [![chrono-badge]][chrono] | [![cat-date-and-time-badge]][cat-date-and-time] |
| [Perform checked date and time calculations][ex-datetime-arithmetic] | [![chrono-badge]][chrono] | [![cat-date-and-time-badge]][cat-date-and-time] |
| [Examine the date and time][ex-examine-date-and-time] | [![chrono-badge]][chrono] | [![cat-date-and-time-badge]][cat-date-and-time] |
+| [File names that have been modified in the last 24 hours for the working directory][ex-file-24-hours-modified] | [![std-badge]][std] | [![cat-filesystem-badge]][cat-filesystem] [![cat-os-badge]][cat-os] |
[ex-std-read-lines]: #ex-std-read-lines
@@ -1705,6 +1706,64 @@ fn main() {
}
```
+[ex-file-24-hours-modified]: #ex-file-24-hours-modified
+
+## File names that have been modified in the last 24 hours for the working directory
+
+[![std-badge]][std] [![cat-filesystem-badge]][cat-filesystem]
+
+Gets the current working directory by calling [`env::current_dir`],
+then for each entries in [`fs::read_dir`], extracts the
+[`DirEntry::path`] and gets the metada via [`fs::Metadata`]. The
+[`Metadata::modified`] returns the [`SystemTime::elapsed`] time since
+last modification of the entry. It's converted into seconds with
+[`Duration::as_secs`] and compared with 24 hours (24 * 60 * 60
+seconds). [`Metadata::is_file`] is used to filter out directories.
+
+```rust
+# #[macro_use]
+# extern crate error_chain;
+#
+use std::{env, fs};
+
+# error_chain! {
+# foreign_links {
+# Io(std::io::Error);
+# SystemTimeError(std::time::SystemTimeError);
+# }
+# }
+#
+fn run() -> Result<()> {
+ let current_dir = env::current_dir()?;
+ 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(())
+}
+#
+# quick_main!(run);
+```
+
{{#include links.md}}
@@ -1733,7 +1792,10 @@ fn main() {
[`DateTime`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html
[`digest::Context`]: https://docs.rs/ring/*/ring/digest/struct.Context.html
[`digest::Digest`]: https://docs.rs/ring/*/ring/digest/struct.Digest.html
+[`DirEntry::path`]: https://doc.rust-lang.org/std/fs/struct.DirEntry.html#method.path
[`Display`]: https://doc.rust-lang.org/std/fmt/trait.Display.html
+[`Duration::as_secs`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.as_secs
+[`env::current_dir`]: https://doc.rust-lang.org/std/env/fn.current_dir.html
[`error_chain!`]: https://docs.rs/error-chain/*/error_chain/macro.error_chain.html
[`Error`]: https://doc.rust-lang.org/std/error/trait.Error.html
[`ErrorKind`]: https://docs.rs/error-chain/*/error_chain/example_generated/enum.ErrorKind.html
@@ -1742,11 +1804,15 @@ fn main() {
[`File::try_clone`]: https://doc.rust-lang.org/std/fs/struct.File.html#method.try_clone
[`File`]: https://doc.rust-lang.org/std/fs/struct.File.html
[`foreign_links`]: https://docs.rs/error-chain/*/error_chain/#foreign-links
+[`fs::Metadata`]: https://doc.rust-lang.org/std/fs/struct.Metadata.html
+[`fs::read_dir`]: https://doc.rust-lang.org/std/fs/fn.read_dir.html
[`gen_ascii_chars`]: https://docs.rs/rand/*/rand/trait.Rng.html#method.gen_ascii_chars
[`HashMap`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html
[`hmac::Signature`]: https://docs.rs/ring/*/ring/hmac/struct.Signature.html
[`IndependentSample::ind_sample`]: https://doc.rust-lang.org/rand/rand/distributions/trait.IndependentSample.html#tymethod.ind_sample
[`Lines`]: https://doc.rust-lang.org/std/io/struct.Lines.html
+[`Metadata::is_file`]: https://doc.rust-lang.org/std/fs/struct.Metadata.html#method.is_file
+[`Metadata::modified`]: https://doc.rust-lang.org/std/fs/struct.Metadata.html#method.modified
[`Mmap::map`]: https://docs.rs/memmap/*/memmap/struct.Mmap.html#method.map
[`Mutex`]: https://doc.rust-lang.org/std/sync/struct.Mutex.html
[`MutexGuard`]: https://doc.rust-lang.org/std/sync/struct.MutexGuard.html
@@ -1784,6 +1850,7 @@ fn main() {
[`seek`]: https://doc.rust-lang.org/std/fs/struct.File.html#method.seek
[`std::io::Error`]: https://doc.rust-lang.org/std/io/struct.Error.html
[`Stdio::piped`]: https://doc.rust-lang.org/std/process/struct.Stdio.html
+[`SystemTime::elapsed`]: https://doc.rust-lang.org/std/time/struct.SystemTime.html#method.elapsed
[`time::Duration`]: https://doc.rust-lang.org/std/time/struct.Duration.html
[`time::Instant::elapsed`]: https://doc.rust-lang.org/std/time/struct.Instant.html#method.elapsed
[`time::Instant::now`]: https://doc.rust-lang.org/std/time/struct.Instant.html#method.now
diff --git a/src/intro.md b/src/intro.md
index a75cb18..8cb2aeb 100644
--- a/src/intro.md
+++ b/src/intro.md
@@ -56,6 +56,7 @@ community. It needs and welcomes help. For details see
| [Parse string into DateTime struct][ex-parse-datetime] | [![chrono-badge]][chrono] | [![cat-date-and-time-badge]][cat-date-and-time] |
| [Perform checked date and time calculations][ex-datetime-arithmetic] | [![chrono-badge]][chrono] | [![cat-date-and-time-badge]][cat-date-and-time] |
| [Examine the date and time][ex-examine-date-and-time] | [![chrono-badge]][chrono] | [![cat-date-and-time-badge]][cat-date-and-time] |
+| [File names that have been modified in the last 24 hours for the working directory][ex-file-24-hours-modified] | [![std-badge]][std] | [![cat-filesystem-badge]][cat-filesystem] [![cat-os-badge]][cat-os] |
## [Encoding](encoding.html)
@@ -188,7 +189,7 @@ community. It needs and welcomes help. For details see
[ex-extract-hashtags]: basics.html#ex-extract-hashtags
[ex-extract-links-webpage]: net.html#ex-extract-links-webpage
[ex-extract-mediawiki-links]: net.html#ex-extract-mediawiki-links
-[ex-format-datetime]: basics.html#ex-format-datetime
+[ex-file-24-hours-modified]: basics.html#ex-file-24-hours-modified
[ex-file-post]: net.html#ex-file-post
[ex-file-predicate]: app.html#ex-file-predicate
[ex-file-sizes]: app.html#ex-file-sizes
@@ -268,4 +269,4 @@ community. It needs and welcomes help. For details see
[ex-url-rm-frag]: net.html#ex-url-rm-frag
[ex-urlencoded]: encoding.html#ex-urlencoded
[ex-verify-extract-email]: basics.html#ex-verify-extract-email
-[ex-handle-rate-limited-api]: net.html#ex-handle-rate-limited-api
\ No newline at end of file
+[ex-handle-rate-limited-api]: net.html#ex-handle-rate-limited-api
diff --git a/src/links.md b/src/links.md
index 62ed48b..cfe2f04 100644
--- a/src/links.md
+++ b/src/links.md
@@ -112,7 +112,7 @@ Keep lines sorted.
[serde-json-badge]: https://badge-cache.kominick.com/crates/v/serde_json.svg?label=serde_json
[serde-json]: https://docs.serde.rs/serde_json/
[serde]: https://docs.rs/serde/
-[std-badge]: https://badge-cache.kominick.com/badge/std-1.22.1-blue.svg
+[std-badge]: https://badge-cache.kominick.com/badge/std-1.25.0-blue.svg
[std]: https://doc.rust-lang.org/std
[syslog-badge]: https://badge-cache.kominick.com/crates/v/syslog.svg?label=syslog
[syslog]: https://docs.rs/syslog/