是否有办法访问windows最近与rust文件夹?


  1. 试着写一个rust脚本来删除一些最近在windows上打开的文件
  2. 请注意它们位于"C:UsersxxRecent"文件夹。
  3. 可以在Win+R中看到它们,然后输入recent跳转到recent文件夹。
  4. 尝试用这段代码直接访问文件夹。
  5. 出错Os {code: 5, kind: PermissionDenied}.
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())
}
}

Then i want to know

  1. 是否有办法获得访问最近文件夹的权限?

    我已经检查了windows-permission crate,但似乎没有帮助。

  2. 知道有一个api叫做SHAddToRecentDocs,可以添加一个或清除所有最近的文件。可惜不符合我的要求。

    那么有什么api可以直接获取最近的文件吗?或者启用/禁用选项在快速访问中显示最近使用的文件.

    搜索了windows-rs crate,但没有找到关键字recent

  3. 如果使用c#,似乎很容易与此代码,没有权限问题,不知道如何做到这一点与rust。

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。automaticDestinations-ms或xxx.customDestinations-ms.

还有很多工作要做。

最新更新