nodejs空文档fs.writeFile / appendFile

时间:2015-08-23 02:29:07

标签: node.js fs

我刚开始使用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大小)

2 个答案:

答案 0 :(得分:2)

当您打开文件描述符时,必须最终将其关闭(fs.close)。每次运行该代码时,都会泄漏文件描述符。每个进程仅限于一定数量的文件描述符,具体取决于您的操作系统和设置。当您用完时,任何需要打开文件的操作都不会成功。

答案 1 :(得分:0)

你可以使用

fs.appendFile(filename, data, {flag: "a+"}, callback)

如果文件存在,这将附加到文件,否则它将使用给定数据创建它。