Node.js fs.writeFile可用于path,但不可用于fd参数

Node.js fs.writeFile可用于path,但不可用于fd参数,node.js,Node.js,}) 在本例中,当我在fs.writeFile中使用fd作为第一个参数时,我得到了错误: fs.open('./test.txt',(err, fd) => { fs.writeFile(fd, 'proba', (err) => { console.log(err) }) 但是,如果我使用fdput文件路径('./test.txt')的实例,一切正常 发生了什么,为什么我不能在这种情况下使用文件描述符。 正如我在文档中所发现的,应该可以通过文件描述符参数以这种方式使

})

在本例中,当我在fs.writeFile中使用
fd
作为第一个参数时,我得到了错误:

fs.open('./test.txt',(err, fd) => {
  fs.writeFile(fd, 'proba', (err) => {
    console.log(err)
 })
但是,如果我使用
fd
put文件路径(
'./test.txt'
)的实例,一切正常

发生了什么,为什么我不能在这种情况下使用文件描述符。
正如我在文档中所发现的,应该可以通过文件描述符参数以这种方式使用它。

当我尝试在Windows 10上的node.js 14.4.0上运行您的代码时,我收到一个EPERM错误。我看不出你会犯同样的错误。我可以通过将
open
模式传递到
fs.open()
来修复该错误,这样它就不会默认为只读。以下是对我有效的代码:

[Error: EBADF: bad file descriptor, write] {
   errno: -9,
  code: 'EBADF',
  syscall: 'write'
 }

我同意另一位评论者的观点,即将
fs.writeFile()
fs.open()
一起使用是没有意义的,因为
fs.write()
更合适,而且更清楚代码的实际功能。

当我试图在Windows 10上的node.js 14.4.0上运行代码时,我遇到了一个EPERM错误。我看不出你会犯同样的错误。我可以通过将
open
模式传递到
fs.open()
来修复该错误,这样它就不会默认为只读。以下是对我有效的代码:

[Error: EBADF: bad file descriptor, write] {
   errno: -9,
  code: 'EBADF',
  syscall: 'write'
 }

我同意另一位评论者的观点,即将
fs.writeFile()
fs.open()
一起使用是没有意义的,因为
fs.write()
更合适,也更清楚代码的实际用途。

文档?真正的问题是“为什么要将
open
writeFile
一起使用?”?使用低级
open
和低级
write
,或者使用单个高级
writeFile
。我只是在学习Node.js,并试图理解它。当我以这种方式使用它时,我的思考过程是:
fs.open(path,callback)
方法用于分配一个新的文件描述符,它位于callback的第一个参数中。然后我试着用这个fd来写文件(),如果你能解释我,在这个思考过程和这个方法中有什么错误,它会对我有帮助吗?如果可以的话,请给我一个详细的解释。我已经链接到了文档中给你解释的部分:你点击并阅读了吗?至于推理失败的地方:当你以“我需要一个文件句柄”开头时,它就错了。你没有。对于任何一个普通函数,您告诉Node文件路径是什么,其余的就由它来完成。在您发送的文档中:它们告诉我们fs.writeFile()与fs.write()是完全相同的。他们解释了差异,但这只是我在研究中发现的documentation@Mike“Pomax”Kamermans请再问一个问题。您如何知道哪些功能是低级的,哪些是高级的?我们需要一直单独使用吗?我假设底层函数是那些在Linux中具有相同名称的类似函数。这是区分它们的唯一方法吗?文档?真正的问题是“为什么要将
open
writeFile
一起使用?”?使用低级
open
和低级
write
,或者使用单个高级
writeFile
。我只是在学习Node.js,并试图理解它。当我以这种方式使用它时,我的思考过程是:
fs.open(path,callback)
方法用于分配一个新的文件描述符,它位于callback的第一个参数中。然后我试着用这个fd来写文件(),如果你能解释我,在这个思考过程和这个方法中有什么错误,它会对我有帮助吗?如果可以的话,请给我一个详细的解释。我已经链接到了文档中给你解释的部分:你点击并阅读了吗?至于推理失败的地方:当你以“我需要一个文件句柄”开头时,它就错了。你没有。对于任何一个普通函数,您告诉Node文件路径是什么,其余的就由它来完成。在您发送的文档中:它们告诉我们fs.writeFile()与fs.write()是完全相同的。他们解释了差异,但这只是我在研究中发现的documentation@Mike“Pomax”Kamermans请再问一个问题。您如何知道哪些功能是低级的,哪些是高级的?我们需要一直单独使用吗?我假设底层函数是那些在Linux中具有相同名称的类似函数。这是区分它们的唯一方法吗?将
a+
标志添加到
fs.open()
方法解决了我的问题。谢谢@jfriend00。现在我只是想知道为什么它会起作用,当我把path作为
fs.writeFile(path)
中的第一个参数,而不是
文件描述符
,即使没有
a+
参数。为什么我用它来做这个为什么?这是因为我正在学习
node.js
,并试图探索如何使用
文件描述符
,这是我们使用
fs.open()
方法创建的。为什么会出现不同的错误?这是因为我在mac os上工作。@PredragDavidovic-因为带有路径名的
fs.writeFile()
在内部使用它自己的默认访问模式
fs.open()
,可能是
“w”
。是的,不同的错误可能是因为不同的操作系统。如果这回答了您的问题,您可以通过单击答案左侧的复选标记向社区表明这一点,这也将为您按照此处的正确步骤赢得一些声誉点数。将
a+
标志添加到
fs.open()
方法解决了我的问题。谢谢@jfriend00。现在我只是想知道为什么它会起作用,当我把path作为
fs.writeFile(path)
中的第一个参数,而不是
文件描述符
,即使没有
a+
参数。为什么我用它来做这个为什么?这是因为我正在学习
node.js
,并试图探索如何使用
文件描述符
,这是我们使用
fs.open()
方法创建的。你为什么得到di