我注意到对于openSync来说可能是个大问题,当你用openSync打开一个文件时,你没有得到文件描述符。如果使用异步调用打开,则只能将其作为回调的参数。问题是你必须有文件描述符来关闭文件!程序员可能还想对文件描述符进行其他操作。
对于node.js来说,fs API中的一个重要遗漏似乎没有提供一种方法来访问fd变量,如果使用同步调用打开,则在异步模式下打开时回调会返回该变量。这实际上会使同步开放对大多数应用程序不可用。
我真的不想在我的开发中使用async文件打开和关闭,如果我可以避免它,有没有办法获得fd变量我需要在使用同步时成功关闭文件打开?
答案 0 :(得分:13)
除文件描述符外,您还可以从openFileSync获得什么?
var fs = require('fs')
var path = require('path')
var fd = fs.openSync(path.join(process.cwd(), 'log.txt'), 'a')
fs.writeSync(fd, 'contents to append')
setTimeout(function () {
console.log('closing file now')
fs.closeSync(fd)
}, 10000)
在上面的节点脚本运行并且在脚本完成后再次运行lsof /path/to/log.txt
时运行lsof /path/to/log.txt
表明文件正在正确关闭
那说你打算通过打开文件来完成什么?也许有一种更好的方式,例如针对您的特定情况进行流式传输