我刚开始使用nodejs编写聊天记录机器人。它现在工作得很好。几个小时后除外。 机器人为每个用户创建一个文档,如果用户尚未存在此类文档,则会为其键入内容,如果存在,则会将其放入该文件中。 这是我的代码:
fs.open('logs/' + channel.substr(1) + '/' + user.username +'.txt','r',function(err,fd){
if (err && err.code=='ENOENT')
{
fs.writeFile('logs/' + channel.substr(1) + '/' + user.username +'.txt', '[' + 'GMT' + moment().format('Z ') + moment().format('D.M.YYYY H:mm:ss') + '] ' + user.username + ': ' + message + '\n', function (err) {});
} else {
fs.appendFile('logs/' + channel.substr(1) + '/' + user.username +'.txt', '[' + 'GMT' + moment().format('Z ') + moment().format('D.M.YYYY H:mm:ss') + '] ' + user.username + ': ' + message + '\n', function(){});
}
});
问题是在几个小时的用户聊天后,新用户的文档最终为空。保持聊天的旧聊天者不会在他们的文件中添加新行。
我正在使用“graceful-fs”模块,因为我希望它可以解决这个问题,但我不认为该模块已经发生了很大变化。 我究竟做错了什么?为什么我的新.txt最终为空(0 kb大小)
答案 0 :(得分:2)
当您打开文件描述符时,必须最终将其关闭(fs.close
)。每次运行该代码时,都会泄漏文件描述符。每个进程仅限于一定数量的文件描述符,具体取决于您的操作系统和设置。当您用完时,任何需要打开文件的操作都不会成功。
答案 1 :(得分:0)
你可以使用
fs.appendFile(filename, data, {flag: "a+"}, callback)
如果文件存在,这将附加到文件,否则它将使用给定数据创建它。