더북(TheBook)

node fsDelete를 한 번 더 실행하면 ENOENT 에러가 발생합니다. 존재하지 않는 파일을 지웠다는 에러입니다.

노드 8.5 버전 이후에는 createReadStreamcreateWriteStreampipe하지 않아도 파일을 복사할 수 있습니다. 다음과 같이 하면 됩니다.

copyFile.js

const fs = require('fs').promises;

fs.copyFile('readme4.txt', 'writeme4.txt')
  .then(() => {
    console.log('복사 완료');
  })
  .catch((error) => {
    console.error(error);
});

콘솔

$ node copyFile
복사 완료

readme.txt와 동일한 내용의 writeme4.txt가 생성되었을 것입니다. 첫 번째 인수로 복사할 파일을, 두 번째 인수로 복사될 경로를, 세 번째 인수로 복사 후 실행될 콜백 함수를 넣습니다.

마지막으로, 파일/폴더의 변경 사항을 감시할 수 있는 watch 메서드를 알아보겠습니다. 빈 텍스트 파일인 target.txt를 만들고 watch.js를 작성합니다.

watch.js

const fs = require('fs');

fs.watch('./target.txt', (eventType, filename) => {
  console.log(eventType, filename);
});

watch.js를 실행하고 target.txt의 내용물을 수정해봅니다. 또한, 파일명을 변경하거나 파일을 삭제해봅시다.

콘솔

$ node watch
// 내용물 수정 후
change target.txt
change target.txt
// 파일명 변경 또는 파일 삭제 후
rename target.txt

내용물을 수정할 때는 change 이벤트가 발생하고, 파일명을 변경하거나 파일을 삭제하면 rename 이벤트가 발생합니다. rename 이벤트가 발생한 후에는 더 이상 watch가 수행되지 않습니다. change 이벤트가 두 번씩 발생하기도 하므로 실무에서 사용할 때는 주의가 필요합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.