Node.js에서 fs.rename을 사용하여 파일 확장자 변경하기
문제 상황: 확장자가 다른 파일 이름 변경하기
여러분이 Node.js에서 파일을 다룰 때, fs.rename
함수를 사용하여 파일 이름을 변경하려고 할 수 있습니다. 그런데 이때 주의할 점이 하나 있습니다. 바로 파일의 확장자가 달라질 경우에는 어떻게 처리해야 하는가입니다. 이 글에서는 이 문제를 해결하는 방법을 자세히 살펴보겠습니다.
‘fs.rename’의 기본 사용법
Node.js에서 제공하는 fs (File System)
모듈에는 파일을 다루는 다양한 메소드가 있습니다. 그 중 fs.rename
은 파일의 이름을 변경하는 역할을 합니다.
기본적인 사용법은 다음과 같습니다.
1
2
3
4
5
6
const fs = require('fs');
fs.rename('oldName.txt', 'newName.txt', (err) => {
if (err) throw err;
console.log('Rename complete!');
});
여기서 oldName.txt
는 변경하려는 파일의 현재 이름이고, newName.txt
는 새로운 이름입니다.
확장자가 다를 때의 문제: ENOTDIR
문제가 발생하는 상황은 이렇습니다. 예를 들어 .txt
파일을 .pdf
로 확장자를 바꾸려고 할 때, fs.rename
을 단순히 사용하면 에러가 발생합니다. 에러 이름은 ENOTDIR
입니다.
이 에러는 ‘Not a directory’ 즉, 지정한 경로가 디렉토리가 아니라는 뜻입니다. 그래서 확장자가 다를 경우에는 좀 더 세심한 처리가 필요합니다.
해결책: path
모듈과 함께 사용하기
이 문제를 해결하기 위해서는 path
모듈을 사용하는 것이 좋습니다. path
모듈을 사용하면 파일의 경로와 이름, 확장자를 쉽게 분리할 수 있습니다.
다음은 해결책의 예입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const fs = require('fs');
const path = require('path');
const oldPath = 'oldName.txt';
const newPath = 'newName.pdf';
fs.rename(oldPath, newPath, (err) => {
if (err) {
if (err.code === 'ENOTDIR') {
const fileName = path.basename(oldPath);
const newFileName = path.basename(newPath);
fs.rename(fileName, newFileName, (err) => {
if (err) throw err;
console.log('Rename complete with different extension!');
});
} else {
throw err;
}
} else {
console.log('Rename complete!');
}
});
이 코드에서는 path.basename
함수를 사용하여 파일 이름만 추출한 후, 새로운 확장자로 변경합니다. 이렇게 하면 ENOTDIR
에러 없이 파일의 확장자까지 성공적으로 변경할 수 있습니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.