【问题标题】:Close stream node.js关闭流 node.js
【发布时间】:2016-11-24 21:21:01
【问题描述】:

我无法关闭 node.js 中的流这是我的代码

        var inp = fs.createReadStream("a/b/c/"+ Name);
        var out = fs.createWriteStream("a/b/c/"+ Name);
        inp.pipe(out);
            inp.close( function(err){
              if (err){
                console.log(err);
              } else {
              inp.unpipe(out);
              socket.emit('Done',{'Name':name});
              console.log('There will be no more data.');
              }
            });

然后我在我的代码中有这个功能,删除目录 inp 的目录

var fse = require("fs-extra");
fse.emptyDir("a/b/c/", function(err){
  if(err){
    console.log(err);
  } else {
    console.log("doneaaaa")
    fse.remove("a/b/c",function(err){
      if(err){
        console.log(err);
      } else {
        console.log('doneaswell');
      }
    });
  }
});

我得到了这个错误!!

doneaaaa
{ [Error: EBUSY: resource busy or locked, unlink 'a/b/c/.nfs000000002ab5000d00000072']
  errno: -16,
  code: 'EBUSY',
  syscall: 'unlink',
  path: 'a/b/c/.nfs000000002ab5000d00000072' }

这意味着流仍然打开!

.nfs 文件是在正确流式传输时创建的,但在流式传输关闭后不应该删除文件吗?

我做错了什么?

【问题讨论】:

  • 我没看到你打电话给unlink // unlinkSync nodejs.org/api/fs.html#fs_fs_unlink_path_callback 还有,fse 是什么?
  • @Pogrindis 很抱歉编辑了问题 var fse = require ('fs-extra');我也尝试从标准 fs 模块取消链接以同样的问题结束

标签: javascript node.js fs


【解决方案1】:

您必须等待回调关闭才能执行删除/解锁操作。从您提供的示例来看,情况并非如此。

【讨论】:

  • 能否请您详细说明一下!谢谢!
【解决方案2】:

Node.js 运行异步,这意味着目录的删除发生在流期间。而是尝试将删除放在回调中,以便它发生在:

var inp = fs.createReadStream("a/b/c/"+ Name);
var out = fs.createWriteStream("a/b/c/"+ Name);
inp.pipe(out);
inp.close( function(err){
  if (err){
    console.log(err);
  } else {
    inp.unpipe(out);
    socket.emit('Done',{'Name':name});
    console.log('There will be no more data.');
  }

  var fse = require("fs-extra");
  fse.emptyDir("a/b/c/", function(err){
    if(err){
      console.log(err);
    } else {
      console.log("doneaaaa");
      fse.remove("a/b/c",function(err){
        if(err){
          console.log(err);
        } else {
          console.log('doneaswell');
        }
      });
    }
  });
});

您还缺少我在此代码中添加的一行上的分号 :)

【讨论】:

  • 我会试一试我现在需要改造我的整个上传模块。谢谢您,将返回结果!
  • @vic-3 不客气 :) 如果可行,请将此答案标记为已接受,以便不再无人回答 :)
猜你喜欢
  • 2015-11-20
  • 2013-01-11
  • 2017-04-30
  • 2020-06-28
  • 2018-02-06
  • 1970-01-01
  • 2013-03-31
  • 2011-07-20
  • 1970-01-01
相关资源
最近更新 更多