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]
Add the following to your Cargo.toml:
toml
[dependencies]
platform-dirs = "0.3.0"
```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"
// }
} ```
```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()
};
} ```
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
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
platform-dirs differs from dirs-rs and directories-rs in several ways:
Library/Preferences
to Library/Application Support
Library/Preferences
is supposed to be used for macOS unique plist preferences: infoAppDirs
:
data_local_dir
UserDirs
:
runtime_dir
, executable_dir
UserDirs
are no longer Options
ProjectDirs
struct into AppDirs
state_dir
to AppDirs
UserDirs
if they are not set instead of returning None