我无法关闭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文件是在流式传输时创建的,但是一旦流关闭后不应该删除文件?
我做错了什么?
答案 0 :(得分:0)
在执行删除/解锁操作之前,您必须等待关闭回调。从您提供的样本看起来并非如此。
答案 1 :(得分:0)
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');
}
});
}
});
});
你也在一行中遗漏了一个分号,我在这段代码中也添加了分号:)