User Directories

RecipeCratesCategories
dirsdirscat-filesystem
directoriesdirectoriescat-filesystem

Get platform-specific locations for configuration, cache, and other data.

dirs

dirs dirs-crates.io dirs-github dirs-lib.rs

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 directories-crates.io directories-github directories-lib.rs

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());
}