【问题标题】:nodejs empty document fs.writeFile/appendFilenodejs 空文件 fs.writeFile/appendFile
【发布时间】:2015-08-23 10:40:54
【问题描述】:

我是使用 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 大小)

【问题讨论】:

  • 任何机会err 不是空的,也不是ENOENT

标签: node.js fs


【解决方案1】:

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

【讨论】:

  • 嗯是有道理的。文档看起来像这样 fs.close(fd, callback),我将如何在我的代码中实现它?只是一个简单的 fs.close() ?因为那对我来说很崩溃
  • @user3648229 你可能想要fs.closeSync(fd),它不需要处理回调。只需将 fd 变量传递给它。或者,使用fs.stat 而不是fs.open,它会在不提供文件描述符的情况下为您提供有关文件是否存在的信息。
【解决方案2】:

你可以使用

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

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

【讨论】:

  • 谢谢,这至少清理了很多代码。我会看看它是否能解决我遇到的问题
猜你喜欢
  • 2015-09-02
  • 2020-05-23
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 2019-12-22
  • 2021-08-10
  • 1970-01-01
  • 2021-07-03
相关资源
最近更新 更多