2016-06-07 2 views
0

NodeJs에 코드를 작성하고 다른 프로세스에서 파일을 사용하고 있는지 확인하고 싶습니다. 사용 중이 아니면 뭔가하십시오.노드 Js : 파일이 다른 프로세스에서 편집을 위해 잠겨 있는지 확인합니다.

fs.stats는 파일 크기가 얼마인지를 나타냅니다. 그리고 다른 프로세스에서 현재 사용 중인지 저에게 말하지 않습니다.

그 외 무엇을 시도해야할지 확실하지 않습니다.

nodejs를 사용하여 파일에 액세스하기 전에 파일이 현재 다른 프로세스에서 편집을 위해 잠겨 있는지 여부를 알려주는 가장 좋은 방법은 무엇입니까?

+0

이'fs' 정말 아래로 편집하는 동안 파일 잠금, 그것을 할 수있는 경우 편집을 수행하고 콜백을 호출하고 성공하지 못한 경우 콜백 첫 번째 인수가 될 것입니다 오류. – adeneo

+0

맞아요, 노드는 파일을 잠그지 않지만 FTP로 파일을 업로드하고 있다면 FTP 서버는 편집을 위해 잠갔습니다. 그 시점에서 나는 그 파일을 무시하고 싶습니다. 더 이상 외부 프로세스가 편집 할 수 없도록 잠긴 경우에만 파일과 상호 작용하고 싶습니다. – shaun

+0

파일이 정말로 잠겨 있다면,'fs'로 파일에 접근하려고하면 처리 할 수있는 콜백에 오류가 발생합니다. 다른 옵션은 파일 업로드시 맵에 일종의 플래그를 설정 한 다음 FTP 업로드가 완료되면 플래그를 지우고 맵을 사용하여 파일이 완료되었는지 확인하는 것입니다. – adeneo

답변

3

코드 왼쪽의 설명에서 일부 지시 사항을 사용하여 코드가 종료되었습니다. 나는 생각하지 않는다

var delInterval = setInterval(del(), 1000); 

function del(){ 
    fs.open(filePath, 'r+', function(err, fd){ 
     if (err && err.code === 'EBUSY'){ 
      //do nothing till next loop 
     } else if (err && err.code === 'ENOENT'){ 
      console.log(filePath, 'deleted'); 
      clearInterval(delInterval); 
     } else { 
      fs.close(fd, function(){ 
       fs.unlink(filePath, function(err){ 
        if(err){ 
        } else { 
        console.log(filePath, 'deleted'); 
        clearInterval(delInterval); 
        } 
       }); 
      }); 
     } 
    }); 
} 
관련 문제