122

In my File-system my working directory is here:

C:\temp\a\b\c\d

and under b\bb there's file: tmp.txt

C:\temp\a\b\bb\tmp.txt

If I want to go to this file from my working directory, I'll use this path:

"../../bb/tmp.txt" 

In case the file is not exist I want to log the full path and tell the user:
"The file C:\temp\a\b\bb\tmp.txt is not exist".

My question:

I need some function that convert the relative path: "../../bb/tmp.txt" to absolute: "C:\temp\a\b\bb\tmp.txt"

In my code it should be like this:

console.log("The file" + convertToAbs("../../bb/tmp.txt") + " is not exist") 

3 Answers 3

250

Use path.resolve

try:

resolve = require('path').resolve resolve('../../bb/tmp.txt') 
Sign up to request clarification or add additional context in comments.

4 Comments

you can also use const {resolve} = require("path");
@DarkKnight, Is there any way to avoid ../../../etc?
@Code_Crash you can use a variable or change working directory like this: stackoverflow.com/q/19803748/4578017 A variable is preferred since changing working directory might cause unwanted side effects
with the newer esm it is import path from 'path' and then path.resolve().
14

You could also use __dirname and __filename for absolute path.

1 Comment

Use this only to know the absolute path of the current directory in which the file resides and the current file respectively.
1

If you can't use require:

const path = { /** * @method resolveRelativeFromAbsolute resolves a relative path from an absolute path * @param {String} relitivePath relative path * @param {String} absolutePath absolute path * @param {String} split default?= '/', the path of the filePath to be split wth * @param {RegExp} replace default?= /[\/|\\]/g, the regex or string to replace the filePath's splits with * @returns {String} resolved absolutePath */ resolveRelativeFromAbsolute(relitivePath, absolutePath, split = '/', replace = /[\/|\\]/g) { relitivePath = relitivePath.replaceAll(replace, split).split(split); absolutePath = absolutePath.replaceAll(replace, split).split(split); const numberOfBacks = relitivePath.filter(file => file === '..').length; return [...absolutePath.slice(0, -(numberOfBacks + 1)), ...relitivePath.filter(file => file !== '..' && file !== '.')].join(split); } }; 
const newPath = path.resolveRelativeFromAbsolute('C:/help/hi/hello/three', '../../two/one'); //returns 'C:/help/hi/two/one' 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.