2014-05-18 3 views
2

특정 디렉토리에 특정 이름의 파일이 생성되는 즉시 작업을 수행해야하는 node.js 프로그램을 작성 중입니다. 파일의 이름이 나타날 때까지 fs.readdir을 반복적으로 호출하여이 작업을 수행 할 수 있습니다.하지만 더 효율적인 작업을 수행하고 싶습니다. 누구든지이 일을 할 수있는 방법을 알고 있습니까?node.js 파일 생성시기 모니터링

답변

5

fs.watch에서 봐 (그리고 fs.watchFile 대체)를 구현하지만, 그것을 실현은 완벽하지 않다 :

http://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener

주의 사항 #

fs.watch의 API가 아닌 플랫폼에 따라 100 % 일관되며 일부 상황에서는 을 사용할 수 없습니다. 가용성 #

이 기능은 파일 시스템 변경을 알리는 방법을 제공하는 기본 운영 체제에 따라 다릅니다. 기본 기능이 어떤 이유로 사용할 수없는 경우

On Linux systems, this uses inotify. 
On BSD systems (including OS X), this uses kqueue. 
On SunOS systems (including Solaris and SmartOS), this uses event ports. 
On Windows systems, this feature depends on ReadDirectoryChangesW. 

, 다음 fs.watch가 작동 할 수 없습니다. 예를 들어 네트워크 파일 시스템 (NFS, SMB 등)의 파일 또는 디렉토리를 보지 못하는 경우 종종 이 안정적으로 작동하거나 전혀 작동하지 않습니다.

통계 폴링을 사용하는 fs.watchFile을 계속 사용할 수 있지만 은 속도가 느리고 안정적이지 않습니다.

+0

이 함수를 사용하면 errno 예외가 발생합니다. 나는 파일이 변경 될 때까지 기다리지 않고 기다리고있다. – MYV

+0

하나의 파일이라면'fs.watchFile'을 사용하거나 커버 아래에있는 것처럼'fs.stat'를 타이머에 호출하면된다. 예, 파일이 없으면 오류가 발생할지 여부를 평가하고 결정해야합니다. – Joe

0

당신은 기본적으로 fs.watchFile 사용하거나 fs.watchFile 자신을 또는 내가 강하게 비 버그 크로스 플랫폼과 빠른 용액에 .. 노드 모듈을 사용하는 것이 좋습니다, 당신을 위해 그것을 않습니다있는 노드 모듈을 사용할 수 있습니다, 그것은 수 있습니다 교활한. 이 작업을 수행하는 chokidar 또는 have a look at other modules을 사용하는 것이 좋습니다.

chokidar하면이 작업을 수행 할 수 있습니다

var chokidar = require('chokidar'); 
var watcher = chokidar.watch('YourDirecrtory'); 
watcher.on('add', function(path) {console.log('File', path, 'has been added');}); 

은 그럼 당신은 가장자리 경우 또는 교차 플랫폼 지원에 대한 관심이 필요하지 않을 것입니다.