본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (8) - fs메서드 살펴보기 2

node js logo image

 

 

 

 

앞서 fs의 메서드를 사용한 예제를 살펴보았습니다. 

 

 

 

 

4. Node 기능 살펴보기 (8) - fs메서드 살펴보기 1

앞선 아티클에서 파일을 읽고 쓰는 메서드를 살펴보았습니다.  const fs = require('fs').promises;const constants = require('fs').constants;fs.access('./folder', constants.F_OK | constants.W_OK | constants.R_OK) .then( () => { return

nozeroslope.tistory.com

 

 

 

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

fs.access('./folder', constants.F_OK | constants.W_OK | constants.R_OK)
    .then( () => {
        return Promise.reject('이미 폴더가 존재함');
    })
    .catch( (err) => {
        if (err.code === 'ENOENT') {
            console.log('폴더가 없음');
            return fs.mkdir('./folder');
        }
        return Promise.reject(err);
    })
    .then( () => {
        console.log('폴더 생성 완료');
        return fs.open('./folder/file.js', 'w');
    })
    .then( (fd) => {
        console.log('빈 파일 생성 완료', fd);
        return fs.rename('./folder/file.js', './folder/newfile.js');
    })
    .then( () => {
        console.log('이름 변경 완료');
    })
    .catch( (err) => {
        console.error(err);
    })
    
 
 /* 출력(첫 실행)
 폴더가 없음
폴더 생성 완료
빈 파일 생성 완료 FileHandle {
  _events: [Object: null prototype] {},
  _eventsCount: 0,
  _maxListeners: undefined,
  close: [Function: close],
  [Symbol(shapeMode)]: false,
  [Symbol(kCapture)]: false,
  [Symbol(kHandle)]: FileHandle {},
  [Symbol(kFd)]: 3,
  [Symbol(kRefs)]: 1,
  [Symbol(kClosePromise)]: null
}
이름 변경 완료
*/



/* 출력(재실행)
이미 폴더가 존재함
*/

 

 

 

우선 위에서 사용된 메서드를 하나씩 살펴보겠습니다. 

 

 

 


 

 

 

 

· fs.access(경로, 옵션, 콜백) : 폴더나 파일에 대한 접근 가능여부를 체크합니다. 두 번째 인수에 상수가 들어가는데, 여기서는 예제에서 확인할 수 있다시피 constants를 통해서 상수를 호출했습니다. 

 

F_OK는 파일의 존재 여부 / R_OK는 읽기 권한 / W_OK는 쓰기 권한 여부를 체크합니다. 여기서 만약 체크했는데 파일/폴더 권한이 없거나 존재하지 않는다면 에러로 처리하게 됩니다. 그 결과 폴더를 자동으로 생성하게 설계되어 있습니다. 이 때 발생하는 에러 코드가 ENOENT입니다. 

 

 

· fs.mkdir(경로, 콜백) : 폴더를 만드는 메서드인데, 이미 폴더가 있는 경우에 에러가 발생합니다. 그래서 앞선 fs.access( )를 이용해 폴더 유무를 확인하는 절차를 거치게 됩니다. 

 

 

· fs.open(경로, 옵션, 콜백) : 특정 파일의 아이디 값을 가져오는 메서드입니다. 이 아이디 값은 변수 fd에 해당합니다. 중요한 지점은, 파일이 없을 경우에 파일을 생성하고 그 다음에 해당 파일의 아이디를 가져온다는 점입니다. 

 

파일 아이디를 가져오게 되면, fs.read / fs.write를 통해서 파일을 읽거나 쓸 수 있습니다. 위의 예제에서는 옵션에 새로 생성할 경로+파일명, 그리고 'w'를 입력했습니다. 쓰기는 w, 읽기는 r, 그리고 기존 파일 추가는 a입니다. 위의 예제에서 만약 r을 인수로 전달했다면 파일이 없는 상태였기 때문에 에러가 발생했을 것입니다. 

 

 

· fs.rename(기존 경로, 새 경로, 콜백) : 파일의 이름을 바꾸는 메서드로, 파일 위치도 지정합니다. 이 때 반드시 같은 위치를 작성할 필요가 없으므로 파일 잘라내기 기능으로도 사용이 가능합니다.