앞서 fs의 메서드를 사용한 예제를 살펴보았습니다.
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(기존 경로, 새 경로, 콜백) : 파일의 이름을 바꾸는 메서드로, 파일 위치도 지정합니다. 이 때 반드시 같은 위치를 작성할 필요가 없으므로 파일 잘라내기 기능으로도 사용이 가능합니다.
'Programming > Node.js' 카테고리의 다른 글
4. Node 기능 살펴보기 (8) - fs메서드 살펴보기 4 (0) | 2024.06.10 |
---|---|
4. Node 기능 살펴보기 (8) - fs메서드 살펴보기 3 (0) | 2024.06.03 |
4. Node 기능 살펴보기 (8) - fs메서드 살펴보기 1 (0) | 2024.05.29 |
4. Node 기능 살펴보기 (7) - 버퍼와 스트림 6 (0) | 2024.05.28 |
4. Node 기능 살펴보기 (7) - 버퍼와 스트림 5 (0) | 2024.05.28 |