#directories #xdg-base #user #platform #path #applications #obtaining

platform-dirs

用于获取应用程序和用户目录的平台相关目录路径的库

5个不稳定版本

0.3.0 2020年9月26日
0.2.0 2019年6月11日
0.1.2 2019年6月8日
0.1.1 2019年6月8日
0.1.0 2019年6月8日

#321文件系统

Download history 4211/week @ 2024-03-14 4597/week @ 2024-03-21 5228/week @ 2024-03-28 4108/week @ 2024-04-04 3876/week @ 2024-04-11 4172/week @ 2024-04-18 3727/week @ 2024-04-25 3935/week @ 2024-05-02 3323/week @ 2024-05-09 4025/week @ 2024-05-16 3243/week @ 2024-05-23 4972/week @ 2024-05-30 4654/week @ 2024-06-06 4897/week @ 2024-06-13 3999/week @ 2024-06-20 4172/week @ 2024-06-27

18,580 每月下载量
54 个crates中使用 (直接使用39个)

MIT 协议

14KB
175

platform-dirs-rs

crates.io docs.rs

Rust库,用于获取应用程序和用户目录的平台相关目录路径。

遵循以下标准

安装

将以下内容添加到您的Cargo.toml文件中

[dependencies]
platform-dirs = "0.3.0"

示例

获取路径

use platform_dirs::{AppDirs, UserDirs};

fn main() {
    let app_dirs = AppDirs::new(Some("name"), false).unwrap();
    dbg!(&app_dirs);
    // AppDirs {
    //     cache_dir: "/home/cjbassi/.cache/name",
    //     config_dir: "/home/cjbassi/.config/name",
    //     data_dir: "/home/cjbassi/.local/share/name",
    //     state_dir: "/home/cjbassi/.local/state/name"
    // }

    let user_dirs = UserDirs::new().unwrap();
    dbg!(&user_dirs);
    // UserDirs {
    //     desktop_dir: "/home/cjbassi/Desktop",
    //     document_dir: "/home/cjbassi/Documents",
    //     download_dir: "/home/cjbassi/Downloads",
    //     music_dir: "/home/cjbassi/Music",
    //     picture_dir: "/home/cjbassi/Pictures",
    //     public_dir: "/home/cjbassi/Public",
    //     video_dir: "/home/cjbassi/Videos"
    // }
}

打开配置文件

use std::fs::{self, File};

use platform_dirs::AppDirs;

fn main() {
    let app_dirs = AppDirs::new(Some("name"), true).unwrap();
    let config_file_path = app_dirs.config_dir.join("config-file");

    fs::create_dir_all(&app_dirs.config_dir).unwrap();

    let file = if config_file_path.exists() {
        File::open(config_file_path).unwrap()
    } else {
        File::create(config_file_path).unwrap()
    };
}

路径列表

AppDirs

目录 Windows Linux/*BSD macOS
cache_dir %LOCALAPPDATA% (C:\Users\%USERNAME%\AppData\Local) $XDG_CACHE_HOME (~/.cache) ~/Library/Caches
config_dir %APPDATA% (C:\Users\%USERNAME%\AppData\Roaming) $XDG_CONFIG_HOME (~/.config) ~/Library/Application Support
data_dir %LOCALAPPDATA% (C:\Users\%USERNAME%\AppData\Local) $XDG_DATA_HOME (~/.local/share) ~/Library/Application Support
state_dir %LOCALAPPDATA% (C:\Users\%USERNAME%\AppData\Local) $XDG_STATE_HOME (~/.local/state) ~/Library/Application Support

UserDirs

目录 Windows Linux/*BSD macOS
desktop_dir {FOLDERID_Desktop} (C:\Users\%USERNAME%\Desktop) $XDG_DESKTOP_DIR (~/Desktop) ~/Desktop
文档目录 {FOLDERID_Documents} (C:\Users\%USERNAME%\Documents) $XDG_DOCUMENTS_DIR (~/Documents) ~/Documents
下载目录 {FOLDERID_Downloads} (C:\Users\%USERNAME%\Downloads) $XDG_DOWNLOAD_DIR (~/Downloads) ~/Downloads
音乐目录 {FOLDERID_Music} (C:\Users\%USERNAME%\Music) $XDG_MUSIC_DIR (~/Music) ~/Music
图片目录 {FOLDERID_Pictures} (C:\Users\%USERNAME%\Pictures) $XDG_PICTURES_DIR (~/Pictures) ~/Pictures
公共目录 {FOLDERID_Public} (C:\Users\%USERNAME%\Public) $XDG_PUBLICSHARE_DIR (~/Public) ~/Public
视频目录 {FOLDERID_Videos} (C:\Users\%USERNAME%\Videos) $XDG_VIDEOS_DIR (~/Videos) ~/Movies

比较

platform-dirs 在几个方面与 dirs-rsdirectories-rs 不同

  • 允许在 macOS 上使用 XDG 规范进行 CLI 应用
  • 将 macOS 上的配置目录从 Library/Preferences 更改为 Library/Application Support
    • Library/Preferences 应用于 macOS 唯一的 plist 首选项:[信息](https://www.reddit.com/r/rust/comments/8hbzyx/can_people_here_give_the_dirs_and_directories/dyj4qtk/)
  • 仅包括跨平台的目录
    • AppDirs:
      • 删除 data_local_dir
    • UserDirs:
      • 删除 runtime_direxecutable_dir
  • 提供比 directories-rs 简单的 API
    • UserDirs 字段不再为 Options
    • 结构字段现在是公开可访问的
    • ProjectDirs 结构合并到 AppDirs
  • AppDirs 添加 state_dir
    • 文档可以在页面底部找到 这里
    • 用于状态化应用程序数据,如日志、历史记录等
  • 在Linux上,如果未设置,则返回默认平台的UserDirs值,而不是返回None

依赖项

~53–510KB