pub fn try_exe_dir() -> Result<&'static Path, AppPathError>Expand description
Get the executable’s directory (fallible).
Use this only for libraries or specialized applications. Most applications should
use exe_dir() for simpler, cleaner code.
§Examples
use app_path::try_exe_dir;
// Library with graceful error handling
match try_exe_dir() {
Ok(exe_dir) => {
println!("Executable directory: {}", exe_dir.display());
let config = exe_dir.join("config.toml");
}
Err(e) => {
eprintln!("Failed to get executable directory: {}", e);
// Implement fallback strategy
}
}
// Use with ? operator
fn get_config_dir() -> Result<std::path::PathBuf, Box<dyn std::error::Error>> {
let exe_dir = try_exe_dir()?;
Ok(exe_dir.join("config"))
}Once the executable directory is successfully determined by either this function or exe_dir(),
the result is cached globally and all subsequent calls to both functions will use the cached value.
This means that after the first successful call, try_exe_dir() will never return an error.
§Returns
Ok(&'static Path)- The directory containing the current executableErr(AppPathError)- Failed to determine executable location
§Performance
This function is highly optimized:
- First call: Determines and caches the executable directory
- Subsequent calls: Returns the cached result immediately (no system calls)
- Thread-safe: Safe to call from multiple threads concurrently
§Examples
§Library Error Handling
use app_path::try_exe_dir;
// Handle the error explicitly
match try_exe_dir() {
Ok(exe_dir) => {
println!("Executable directory: {}", exe_dir.display());
// Use exe_dir for further operations
}
Err(e) => {
eprintln!("Failed to get executable directory: {}", e);
// Implement fallback strategy
}
}§Use with ? Operator
use app_path::try_exe_dir;
// Use with the ? operator in functions that return Result
fn get_config_dir() -> Result<std::path::PathBuf, Box<dyn std::error::Error>> {
let exe_dir = try_exe_dir()?;
Ok(exe_dir.join("config"))
}