2016-07-21 4 views
2

내가 Node.js를에 스트림을 닫을 수 없습니다입니다 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

누락 된

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'); } }); } }); }); 

대신 후에는 occours 있도록 콜백의 내부의 삭제를 넣어 시도 'unlink' //'unlinkSync' https://nodejs.org/api/fs.html#fs_fs_unlink_path_callback 또한'fse'는 무엇입니까? – Pogrindis

+0

@Pogrindis 그 점에 대해 죄송합니다. var fse = require ('fs-extra'); 난뿐만 아니라 표준 fs 모듈에서 unlink 시도 같은 문제가 끝났다 –

답변

0

제거/잠금 해제 작업을 수행하기 전에 콜백 호출이 완료 될 때까지 기다려야합니다. 당신이 제공 한 견본에서 이런 경우가 아닌 것처럼 보입니다.

+0

좀 제발 정교한 수있어! 고맙습니다 ! –

0

Node.js는 비동기 적으로 실행됩니다. 즉, 스트림을 삭제하는 동안 디렉토리가 삭제됩니다. 또한 나뿐만 아니라이 코드에서 추가 한 줄에 세미콜론 : 난 당신이 전화 표시되지 않습니다

+0

나는 그것을 내 전체 업로드 모듈을 지금 리모델링 할 필요가있다. 감사합니다. 결과가 게시됩니다. –

+0

@ vic-3 환영합니다 :) 작동하는 경우이 응답을 허용 된 것으로 표시하여 더 이상 답변을 제공하지 않습니다. :) – Tropic

관련 문제