1. try 编写一个rust脚本来删除Windows上最近打开的一些文件.
  2. 注意,它们位于"C:\USERS\xx\Recent"文件夹中.
  3. 可以按Win+R组合键查看它们,然后输入Recent Jumping到Recent文件夹.
  4. try 使用此代码直接访问该文件夹.
  5. 失败,返回错误OS{代码:5,种类:拒绝权限}.
use dirs::home_dir;
use std::fs;

fn main() {
    let user_folder = home_dir().unwrap();

    let recent_folder = user_folder.join("Recent");

    let recent_folder_contents = fs::read_dir(recent_folder.to_str().unwrap()).unwrap();

    println!("{}", recent_folder.display());
    
    for path in recent_folder_contents {
        println!("{}", path.unwrap().path().display())
    }
}

那我就想知道

  1. 有什么方法可以获得访问最近使用的文件夹的权限吗?

    我已经判断了视窗许可箱,但似乎没有帮助.

  2. 我知道有一个名为SHAddToRecentDocs的API,它可以添加一个或清除所有最近的文件.遗憾的是,不符合我的要求.

    那么有没有API可以直接获取最新的文件呢?或启用/禁用选项show recently used files in quick access.

    我搜索了WINDOWS-RS crate ,但没有找到关键字recentshared

  3. 如果使用c#,这段代码似乎很容易,而且没有权限问题,不确定如何使用Ruust来做到这一点.

DirectoryInfo d = new DirectoryInfo(
                          System.Environment.GetFolderPath(
                              Environment.SpecialFolder.Recent))

推荐答案

感谢@AlexK.的帮助.现在是工作代码.

// cargo.toml
[dependencies]
walkdir = "2"
winsafe = { version = "0.0.11", features = [ "shell" ] }


// main.rs
use walkdir::WalkDir;
use winsafe::{co, SHGetKnownFolderPath};

fn main() {
    let docs_folder = SHGetKnownFolderPath(
        &co::KNOWNFOLDERID::Recent,
        co::KF::DEFAULT,
        None,
    ).unwrap();

    println!("Recent Folder Path: {}", docs_folder);
    
    for path in WalkDir::new(docs_folder) {
        println!("{}", path.unwrap().path().display())
    }
}

最近的文件将显示为xxx.AutomaticDestitions-ms或xxx.CustomDestainments-ms.

还有一些工作需要弄清楚.

Rust相关问答推荐

如何在Rust中获得不可辩驳的'if let'模式警告Mutex锁定?""

go 掉包装 struct 中的泛型

如何从铁 rust 中呼唤_mm_256_mul_ph?

亚性状上位性状上的 rust 病伴生型界限

Box::new()会从一个堆栈复制到另一个堆吗?

获取与父字符串相关的&;str的原始片段

是否可以使用Serde/Rust全局处理无效的JSON值?

在 Rust 中用问号传播错误时对类型转换的困惑?

为什么 GAT、生命周期和异步的这种组合需要 `T: 'static`?

如何处理闭包中的生命周期以及作为参数和返回类型的闭包?

Rust FFI 和 CUDA C 性能差异

为什么我可以使用 &mut (**ref) 创建两个实时 &mut 到同一个变量?

unwrap 选项类型出现错误:无法移出共享引用后面的*foo

没有得到无法返回引用局部变量`queues`的值返回引用当前函数拥有的数据的值的重复逻辑

如果不满足条件,如何在 Rust 中引发错误

如何将 Rust 中的树状 struct 展平为 Vec<&mut ...>?

我可以在不调用 .clone() 的情况下在类型转换期间重用 struct 字段吗?

当特征函数依赖于为 Self 实现的通用标记特征时实现通用包装器

有没有办法隐藏类型定义?

如何阅读 HttpRequest 主体