User Directories
Recipe | Crates | Categories |
---|---|---|
dirs | ||
directories |
Get platform-specific locations for configuration, cache, and other data.
dirs
dirs
⮳ is a low-level library that provides platform-specific standard locations of directories for config, cache and other data on Linux, Windows, macOS and Redox by leveraging the mechanisms defined by the XDG base/user directory specifications on Linux, the Known Folder API on Windows, and the Standard Directory guidelines on macOS.
// The `dirs` crate provides a convenient way to get paths to // standard directories on the file system, like the user's home directory, // the configuration directory, and more. fn main() { // Get the home directory if let Some(home_dir) = dirs::home_dir() { println!("Home directory: {:?}", home_dir); } else { println!("Home directory could not be found."); } // Get the configuration directory if let Some(config_dir) = dirs::config_dir() { println!("Configuration directory: {:?}", config_dir); } else { println!("Configuration directory could not be found."); } // Get the data directory if let Some(data_dir) = dirs::data_dir() { println!("Data directory: {:?}", data_dir); } else { println!("Data directory could not be found."); } // Get the cache directory if let Some(cache_dir) = dirs::cache_dir() { println!("Cache directory: {:?}", cache_dir); } else { println!("Cache directory could not be found."); } // Get the executable directory if let Some(exec_dir) = dirs::executable_dir() { println!("Executable directory: {:?}", exec_dir); } else { println!("Executable directory could not be found."); } }
directories
directories
⮳ is a mid-level library that provides platform-specific standard locations of directories for config, cache and other data on Linux, Windows and macOS by leveraging the mechanisms defined by the XDG base/user directory specifications on Linux, the Known Folder API on Windows, and the Standard Directory guidelines on macOS.
directories
⮳ is a higher-level library than dirs
⮳ and can also compute paths for applications.
use std::path::PathBuf; use anyhow::Result; use anyhow::anyhow; use directories::ProjectDirs; pub fn get_data_dir() -> Result<PathBuf> { let directory = if let Ok(s) = std::env::var("APP_DATA_DIR") { PathBuf::from(s) } else if let Some(proj_dirs) = ProjectDirs::from("com", "Foo Corp", "Bar App") { proj_dirs.data_local_dir().to_path_buf() } else { return Err(anyhow!("Unable to find the data directory")); }; Ok(directory) } pub fn get_config_dir() -> Result<PathBuf> { let directory = if let Ok(s) = std::env::var("APP_CONFIG_DIR") { PathBuf::from(s) } else if let Some(proj_dirs) = ProjectDirs::from("com", "Foo Corp", "Bar App") { proj_dirs.config_local_dir().to_path_buf() } else { return Err(anyhow!("Unable to find the config directory")); }; Ok(directory) } fn main() { println!("{:?}", get_data_dir()); println!("{:?}", get_config_dir()); }