如何从节点中的文件描述符获取完整路径
var fs = require('fs')
var fd = fs.openSync('package.json', 'r')
console.log(fd) // 10
console.log(get_file_path_from_fd(fd)) // HELP
编辑:我找到了this
> fs.openSync('.', 'r')
10
> fs.readlinkSync('/proc/self/fd/10')
'/home/alfred/repos/test
但我没有在Mac中找到proc文件夹
答案 0 :(得分:1)
考虑到您正在加载与脚本位于同一目录中的文件,您可以使用__dirname
全局来查找当前目录。
https://nodejs.org/docs/latest/api/globals.html#globals_dirname
事实上,我更喜欢使用__dirname
作为fs
模块路径的一部分加载文件作为一种良好做法。例如,这是来自我有的Discord机器人......
var tokenJSON = require( __dirname + '/json/discord_token.json');
编辑:所以把它放到答案本身;您的fd
变量包含从文件加载的数据,但它与最初来自的文件完全断开连接。如果要为您加载任意文件并希望获得该路径,我们需要了解有关如何向您提供该文件的更多信息。当给你文件时,应该包含一个路径(所以脚本可以找到数据!)这就是你想要的。如果您的示例中没有类似路径,那么这意味着相对路径是相同的,它是当前目录。
答案 1 :(得分:1)
const {execSync} = require('child_process')
const fs = require('fs')
var fd = fs.openSync('package.json', 'r')
var fullpath = execSync(`lsof -a -p ${process.pid} -d ${fd}`).toString().split('\n')[1].split(/\s+/).pop()
console.log(fullpath) // result: /fullpath/package.json