获取node.js中文件描述符的文件路径/名称

时间:2016-12-18 17:44:27

标签: node.js

如何从节点中的文件描述符获取完整路径

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文件夹

2 个答案:

答案 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