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")
The absolutePath function works by beginning at the starting folder and moving up one level for each "../" in the relative path. Then it concatenates the changed starting folder with the relative path to produce the equivalent absolute path.
Use the path. resolve() method to get an absolute path of a file from a relative path in Node. js, e.g. path. resolve('./some-file.
__dirname: It is a local variable that returns the directory name of the current module. It returns the folder path of the current JavaScript file. Difference between process.cwd() vs __dirname in Node.js is as follows: process.cwd()
Use path.resolve
try:
resolve = require('path').resolve
resolve('../../bb/tmp.txt')
You could also use __dirname and __filename
for absolute path.
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'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With