- 试着写一个rust脚本来删除一些最近在windows上打开的文件
- 请注意它们位于"C:UsersxxRecent"文件夹。
- 可以在Win+R中看到它们,然后输入recent跳转到recent文件夹。 尝试用这段代码直接访问文件夹。
- 出错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
是否有办法获得访问最近文件夹的权限?
我已经检查了windows-permission crate,但似乎没有帮助。
知道有一个api叫做SHAddToRecentDocs,可以添加一个或清除所有最近的文件。可惜不符合我的要求。
那么有什么api可以直接获取最近的文件吗?或者启用/禁用选项在快速访问中显示最近使用的文件.
搜索了windows-rs crate,但没有找到关键字recent和
如果使用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.
还有很多工作要做。