2017-04-09 3 views
1

디렉토리의 비디오 파일을 주기적으로 반복하는 Node.js 프로그램이 있습니다. 파일이 추가되거나 제거되면 프로그램은이 변경 사항을 반영하도록 데이터베이스를 업데이트합니다. 파일이 추가되면 FFmpeg가 축소판을 생성하는 데 사용됩니다.파일 복사 중

현재 디렉토리에 복사중인 파일에서 FFmpeg를 실행할 때 문제가 있습니다. 파일이 완전하지 않기 때문에, FFmpeg는 썸네일을 생성 할 수 없습니다. 파일을 복사하는 시점을 알면 무시할 수 있으며 다음 번에 디렉토리를 검색 할 때 파일을 가져옵니다.

파일을 현재 복사 중인지 또는 현재 파일 복사를 무시하고 디렉토리를 반복해야하는지 어떻게 결정합니까?

+0

"파일 복사가 완료되면 ** 완전하고 정확합니다 **"라고 생각 했습니까? 어떻게 그걸 해결할 건데? 파일 전송 프로세스를 제어 할 수 있습니까? –

+0

@AndrewHenle 복사는 파일을 디렉토리로 복사하거나 드래그하는 사용자가 수행합니다. 바라건대 OS가 파일을 성공적으로 복사 할 수 있기를 바랍니다. 파일이 어떤 식 으로든 손상되면 프로그램이 오류와 함께 종료됩니다. – user2248702

답변

0

파일을 찾으면 현재 크기 (바이트)를 취한 다음 1 초 후에 파일을 확인하고 파일 크기가 여전히 동일한 지 확인하십시오. 그렇지 않으면 파일이 현재 쓰여지고 있음을 의미합니다.

+1

대부분의 경우이 방법이 효과가있을 것이라고 생각하지만 파일 전송에 몇 초가 걸리고 몇 초 동안 멈추는 경우가 있습니다. – user2248702

+0

node.js를 사용하고 있기 때문에 동시에 여러 파일로이 작업을 수행 할 수 있습니다. 점검주기를 예를 들어 증가시킬 수 있습니다. 10 초, 또는 수표 금액을 늘리십시오. 나는 이것이 이것을 할 수있는 유일한 방법이라고 믿으며, 당신이 필요로하는 것을하는 모든 OS의 기능을 모른다. –

1

두 개의 프로세스, 파일을 작성 한 서면 파일에서 작동 하나가 가정하면 복사가 완료되면

  1. 임시 파일 이름 (/ tmp를/파일 이름)
  2. 당신의 파일을 작성, 즉시 대상 디렉토리에 링크하십시오.

이 전략을 사용하면 축소판 프로세스가 대상 디렉토리에서 변경 사항을 감시하므로 전체 파일 만 포함되도록 할 수 있습니다.

fs.watch을 참조하십시오. 변경 사항에 대한 디렉토리를 "감시"할 수 있습니다.