platform-dirs-rs

crates.io docs.rs

A Rust library for obtaining platform dependent directory paths for application and user directories.

Uses the following standards: - Linux/*BSD: [XDG Base Directories] and [XDG User Directories] - macOS: [Standard Directories] - Windows: [Known Folder]

Installation

Add the following to your Cargo.toml:

toml [dependencies] platform-dirs = "0.3.0"

Examples

Obtaining paths

```rust use platform_dirs::{AppDirs, UserDirs};

fn main() { let appdirs = AppDirs::new(Some("name"), false).unwrap(); dbg!(&appdirs); // AppDirs { // cachedir: "/home/cjbassi/.cache/name", // configdir: "/home/cjbassi/.config/name", // datadir: "/home/cjbassi/.local/share/name", // statedir: "/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"
// }

} ```

Opening config file

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

use platform_dirs::AppDirs;

fn main() { let appdirs = AppDirs::new(Some("name"), true).unwrap(); let configfilepath = appdirs.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()
};

} ```

Path list

AppDirs

Directory | Windows | Linux/*BSD | macOS -----------|--------------------------------------------------------|--------------------------------------|------------------------------------ cachedir | %LOCALAPPDATA% (C:\Users\%USERNAME%\AppData\Local) | $XDG_CACHE_HOME (~/.cache) | ~/Library/Caches configdir | %APPDATA% (C:\Users\%USERNAME%\AppData\Roaming) | $XDG_CONFIG_HOME (~/.config) | ~/Library/Application Support datadir | %LOCALAPPDATA% (C:\Users\%USERNAME%\AppData\Local) | $XDG_DATA_HOME (~/.local/share) | ~/Library/Application Support statedir | %LOCALAPPDATA% (C:\Users\%USERNAME%\AppData\Local) | $XDG_STATE_HOME (~/.local/state) | ~/Library/Application Support

UserDirs

Directory | Windows | Linux/*BSD | macOS -------------|-----------------------------------------------------------|-------------------------------------|------------------ desktopdir | {FOLDERID_Desktop} (C:\Users\%USERNAME%\Desktop) | $XDG_DESKTOP_DIR (~/Desktop) | ~/Desktop documentdir | {FOLDERID_Documents} (C:\Users\%USERNAME%\Documents) | $XDG_DOCUMENTS_DIR (~/Documents) | ~/Documents downloaddir | {FOLDERID_Downloads} (C:\Users\%USERNAME%\Downloads) | $XDG_DOWNLOAD_DIR (~/Downloads) | ~/Downloads musicdir | {FOLDERID_Music} (C:\Users\%USERNAME%\Music) | $XDG_MUSIC_DIR (~/Music) | ~/Music picturedir | {FOLDERID_Pictures} (C:\Users\%USERNAME%\Pictures) | $XDG_PICTURES_DIR (~/Pictures) | ~/Pictures publicdir | {FOLDERID_Public} (C:\Users\%USERNAME%\Public) | $XDG_PUBLICSHARE_DIR (~/Public) | ~/Public video_dir | {FOLDERID_Videos} (C:\Users\%USERNAME%\Videos) | $XDG_VIDEOS_DIR (~/Videos) | ~/Movies

Comparisons

platform-dirs differs from dirs-rs and directories-rs in several ways: