#linux-macos #directory #xdg #path #folder #xdg-base #app-dirs

directories-next

一个轻量级的中级库,通过利用 Linux 的 XDG 基目录/用户目录规范、Windows 的已知文件夹 API 和 macOS 的标准目录指南,为 Linux、Windows 和 macOS 提供特定平台的目录标准位置,用于配置、缓存和其他数据

5 个稳定版本

2.0.0 2020 年 10 月 22 日
1.0.3 2020 年 10 月 21 日
1.0.1 2020 年 5 月 23 日
0.0.0 2020 年 5 月 6 日

#260文件系统

Download history 86883/week @ 2024-03-14 95889/week @ 2024-03-21 96740/week @ 2024-03-28 100416/week @ 2024-04-04 99987/week @ 2024-04-11 101182/week @ 2024-04-18 95857/week @ 2024-04-25 89329/week @ 2024-05-02 91680/week @ 2024-05-09 95189/week @ 2024-05-16 98803/week @ 2024-05-23 98002/week @ 2024-05-30 81716/week @ 2024-06-06 92682/week @ 2024-06-13 91738/week @ 2024-06-20 77850/week @ 2024-06-27

360,259 每月下载次数
用于 403 个 Crates (121 直接)

MIT/Apache

73KB
785

crates.io API documentation

directories-next

注意:此包是已废弃的 directories 包的分支。

有一个低级姐妹库,dirs-next

简介

  • 一个具有最小 API 的轻量级中级库
  • 提供平台特定的用户可访问位置
  • 用于检索和存储配置、缓存和其他数据
  • 在 Linux、Redox、Windows (≥ Vista)、macOS 和其他平台上。

该库通过利用 Linux 的 XDG 基目录XDG 用户目录 规范

平台

此库是用 Rust 编写的,并支持 Linux、Redox、macOS 和 Windows。也支持其他平台;它们使用 Linux 规范。

Rust 版本最低要求策略

所需的最小 Rust 版本是 1.34.0

我们可能会在主版本和次版本中提升Rust的版本(在x/y中,即在x.y.z)。更改Rust版本将在CHANGELOG中记录。

示例

由Alice用户运行的库

use directories_next::{BaseDirs, UserDirs, ProjectDirs};

if let Some(proj_dirs) = ProjectDirs::from("com", "Foo Corp",  "Bar App") {
    proj_dirs.config_dir();
    // Lin: /home/alice/.config/barapp
    // Win: C:\Users\Alice\AppData\Roaming\Foo Corp\Bar App\config
    // Mac: /Users/Alice/Library/Application Support/com.Foo-Corp.Bar-App
}

if let Some(base_dirs) = BaseDirs::new() {
    base_dirs.executable_dir();
    // Lin: Some(/home/alice/.local/bin)
    // Win: None
    // Mac: None
}

if let Some(user_dirs) = UserDirs::new() {
    user_dirs.audio_dir();
    // Lin: /home/alice/Music
    // Win: C:\Users\Alice\Music
    // Mac: /Users/Alice/Music
}

设计目标

  • directories-next库被设计用来在调用BaseDirs::newUserDirs::newProjectDirs::from时提供一个准确的系统状态的快照。随后系统状态的变化不会反映在之前创建的值上。
  • 此库不会创建目录或检查它们的存在。该库仅提供特定目录的路径信息。如何使用这些信息是开发者根据每个应用程序的要求自行决定的。
  • 此库故意只关注提供用户可写目录的信息。在一个操作系统上返回指向用户级可写目录的路径,而在另一个操作系统上返回系统级只读目录,这种做法不会带来任何可感知的好处,反而会带来混淆和意外的失败。
    • executable_dir被指定以提供二进制的用户可写目录的路径。
      由于这种目录通常只存在于Linux上,它在macOS和Windows上返回None
    • font_dir被指定以提供字体的用户可写目录的路径。
      由于这种目录只存在于Linux和macOS上,它在Windows上返回None
    • runtime_dir被指定以提供非必要运行时数据的目录路径。要求该目录在用户登录时创建,只对用户本身可访问,在用户注销时删除,并支持操作系统的所有文件系统功能。
      由于这种目录通常只存在于Linux上,它在macOS和Windows上返回None

功能

BaseDirs

BaseDirs的预期用例是用来查询由库运行所在的操作系统惯例定义的、用户不可见的标准目录路径。

如果您想计算您自己的应用程序或项目的缓存、配置或数据目录的位置,请使用ProjectDirs

函数名 Linux上的值 Windows上的值 macOS上的值
home_dir $HOME {FOLDERID_Profile} $HOME
cache_dir $XDG_CACHE_HOME$HOME/.cache {FOLDERID_LocalAppData} $HOME/Library/Caches
config_dir $XDG_CONFIG_HOME$HOME/.config {FOLDERID_RoamingAppData} $HOME/Library/Application Support
data_dir $XDG_DATA_HOME$HOME/.local/share {FOLDERID_RoamingAppData} $HOME/Library/Application Support
数据本地目录 $XDG_DATA_HOME$HOME/.local/share {FOLDERID_LocalAppData} $HOME/Library/Application Support
可执行目录 Some($XDG_BIN_HOME/../bin)Some($XDG_DATA_HOME/../bin)Some($HOME/.local/bin) None None
运行时目录 Some($XDG_RUNTIME_DIR)None None None

用户目录

UserDirs 的预期用途是查询用户界面的标准目录路径,这些目录是根据运行库的操作系统约定定义的。

函数名 Linux上的值 Windows上的值 macOS上的值
home_dir $HOME {FOLDERID_Profile} $HOME
音频目录 Some(XDG_MUSIC_DIR)None Some({FOLDERID_Music}) Some($HOME/Music/)
桌面目录 Some(XDG_DESKTOP_DIR)None Some({FOLDERID_Desktop}) Some($HOME/Desktop/)
文档目录 Some(XDG_DOCUMENTS_DIR)None Some({FOLDERID_Documents}) Some($HOME/Documents/)
下载目录 Some(XDG_DOWNLOAD_DIR)None Some({FOLDERID_Downloads}) Some($HOME/Downloads/)
字体目录 Some($XDG_DATA_HOME/fonts/)Some($HOME/.local/share/fonts/) None Some($HOME/Library/Fonts/)
图片目录 Some(XDG_PICTURES_DIR)None Some({FOLDERID_Pictures}) Some()
公共目录 Some(XDG_PUBLICSHARE_DIR)None Some({FOLDERID_Public}) Some()
模板目录 Some(XDG_TEMPLATES_DIR)None Some({FOLDERID_Templates}) None
video_dir Some(XDG_VIDEOS_DIR)None Some({FOLDERID_Videos}) Some($HOME/Movies/)

ProjectDirs

ProjectDirs 的预期用途是计算您自己的应用程序或项目缓存、配置或数据目录的位置,这些目录是从标准目录派生出来的。

函数名 Linux上的值 Windows上的值 macOS上的值
cache_dir $XDG_CACHE_HOME/<project_path>$HOME/.cache/<project_path> {FOLDERID_LocalAppData}/<project_path>/cache $HOME/Library/Caches/<project_path>
config_dir $XDG_CONFIG_HOME/<project_path>$HOME/.config/<project_path> {FOLDERID_RoamingAppData}/<project_path>/config $HOME/Library/Application Support/<project_path>
data_dir $XDG_DATA_HOME/<project_path>$HOME/.local/share/<project_path> {FOLDERID_RoamingAppData}/<project_path>/data $HOME/Library/Application Support/<project_path>
数据本地目录 $XDG_DATA_HOME/<project_path>$HOME/.local/share/<project_path> {FOLDERID_LocalAppData}/<project_path>/data $HOME/Library/Application Support/<project_path>
运行时目录 Some($XDG_RUNTIME_DIR/_project_path_) None None

<project_path> 的具体值由

ProjectDirs::from(qualifier: &str,
                  organization: &str,
                  application: &str)

函数及其在不同操作系统之间的变化。例如,调用

ProjectDirs::from("org"         /*qualifier*/,
                  "Baz Corp"    /*organization*/,
                  "Foo Bar-App" /*application*/)

将得到以下值

Linux上的值 Windows上的值 macOS上的值
"foobar-app" "Baz Corp/Foo Bar-App" "org.Baz-Corp.Foo-Bar-App"

ProjectDirs::from_path函数允许直接从PathBuf值创建ProjectDirs结构体。此参数将按原样使用,并不适应操作系统标准。强烈建议不要使用ProjectDirs::from_path,因为其结果至少在三个平台中的两个平台上不会遵循操作系统标准。

比较

在Rust生态系统中有其他crate尝试类似或相关的事情。以下是它们的概述,以及指导此crate设计的属性评分。

请对此表持保留态度:另一个crate可能非常适合您的特定用例。

状态 Lin Mac Win Base User Proj Conv
app_dirs 未维护 🞈
app_dirs2 维护中 🞈
dirs-next 开发中
directories-next 开发中
s_app_dir 未维护? 🞈 🞈
standard_paths 维护中
xdg 维护中 🞈
xdg-basedir 未维护? 🞈
xdg-rs 已废弃 🞈

构建

如果使用rustup安装了必要的工具链,则可以跨编译此库。这有助于确保更改不会在不同平台上破坏编译。

以下命令将在Linux、macOS和Windows上构建此库

cargo build --target=x86_64-unknown-linux-gnu
cargo build --target=x86_64-pc-windows-gnu
cargo build --target=x86_64-apple-darwin
cargo build --target=x86_64-unknown-redox

许可证

根据您的选择,许可协议为以下之一

贡献

除非您明确表示,否则根据Apache-2.0许可证定义的,您提交的任何旨在包含在作品中并由您提交的贡献,应按上述方式双重许可,而不附加任何其他条款或条件。

依赖项

~2–465KB