User Directories and Preferred Applications

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.

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.

//! This example demonstrates how to use the `directories` crate to find the
//! user's data and config directories.

use std::path::PathBuf;

use anyhow::Result;
use anyhow::anyhow;
use directories::ProjectDirs;

/// Returns the user's data directory.
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)
}

/// Returns the user's config 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());
}

Open a file or URL using the program configured on your System

open open-crates.io open-github open-lib.rs

open opens a path or URL using the program configured on the system.

//! Demonstrates how to use the `open` crate to open files and URLs using the
//! default program associated with the file type.

fn main() {
    //  The `that` function attempts to open the specified path with the
    // appropriate application. If an error occurs during the opening
    // process, it will be printed to the standard error stream.
    if let Err(e) = open::that("example.txt") {
        eprintln!("Failed to open file: {}", e);
    }

    // Open a URL using the default web browser.
    if let Err(e) = open::that("https://www.rust-lang.org") {
        eprintln!("Failed to open URL: {}", e);
    }
    // OR: open::with("http://rust-lang.org", "firefox")?;

    // Depending on the platform and system configuration, launchers can block.
    // If you want to be sure they don't, use `that_in_background()` or
    // `that_detached` instead.

    // Get the commands that would be used to try to open the specified path.
    // This is useful for understanding how the `open` crate would handle a
    // given path. The commands are printed to the standard output stream.
    let path = "http://rust-lang.org";
    open::commands(path)
        .iter()
        .for_each(|x| println!("{:?}", x));
}