Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #107 Get folder containing current program

Assign to string dir the path of the folder containing the currently running executable.
(This is not necessarily the working directory, though.)

import "os"
import "path/filepath"
programPath := os.Args[0]
absolutePath, err := filepath.Abs(programPath)
if err != nil {
	return err
}
dir := filepath.Dir(absolutePath)
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <linux/limits.h>
#include <libgen.h>
int main()
{
    char exe[PATH_MAX], real_exe[PATH_MAX];
    ssize_t r;
    char *dir;

    if ((r = readlink("/proc/self/exe", exe, PATH_MAX)) < 0)
      exit(1);
    if (r == PATH_MAX)
	r -= 1;
    exe[r] = 0;
    if (realpath(exe, real_exe) == NULL)
	exit(1);
    dir = dirname(real_exe);
    puts(dir);
}
dir = AppDomain.CurrentDomain.BaseDirectory;
import std.path;
void main(string[] args) {
    string dir = args[0].dirName;
}
import System.Environment (getExecutablePath)
import System.FilePath.Windows
dir <- takeDirectory `fmap` getExecutablePath
import System.Environment (getExecutablePath)
import System.FilePath.Windows
import System.IO.Unsafe (unsafePerformIO)
dir = unsafePerformIO (takeDirectory `fmap` getExecutablePath)
const dir = __dirname;
const path = require('path');
const dir = path.resolve();
dir = arg[1]
$dir = realpath(dirname(__FILE__));
dir := extractfilepath(paramstr(0));
uses SysUtils;
dir := GetCurrentDir;
use English qw($EXECUTABLE_NAME);
use Path::Tiny qw(path);
my $dir = path($EXECUTABLE_NAME)->parent;
import os
dir = os.path.dirname(os.path.abspath(__file__))
from pathlib import Path
dir = str(Path(__file__).parent)
dir = __dir__
let dir = std::env::current_exe()?
    .canonicalize()
    .expect("the current exe should exist")
    .parent()
    .expect("the current exe should be a file")
    .to_string_lossy()
    .to_owned();

New implementation...
< >
programming-idioms.org