개발 창고/NodeJS

[FS] 파일 복사

로이제로 2023. 2. 20. 22:00
반응형
// filecopy.js
const fs = require('fs');

(async () => {
    fs.copyFile('origin.txt', 'copied.txt', err => {
        if(err)    throw err;
        
        console.log('origin.txt파일이 copied.txt파일로 복사되었습니다.');
    });
})();
fs.copyFile("원본파일", "복사될파일", callback함수)

 

만약 아래와 같이 origin.txt파일이 실행하려는 파일 filecopy.js와 같은 폴더에 존재한다면

아래 명령어를 실행하면

console.log에서 적어둔 message가 출력되면서 아래와 같이 copied.txt파일이 생성됨을 확인할 수 있습니다.

callback은 굳이 필요 없는 경우 생략해도 됩니다.

 

만약 copyFile이 지원되지 않는 버전이라고 한다면 아래와 같이 호출할 수도 있습니다.

// filecopy.js
const fs = require('fs');

(async () => {
    fs
    .createReadStream('origin.txt')
    .pipe(fs.createWriteStream('copied.txt'))
    .on('finish', () => {
        console.log('origin.txt파일이 copied.txt파일로 복사되었습니다.');
    })
})();

※ 이 경우 error의 처리가 필요한 경우에는 readstream에 대한 에러 처리와 writestream에 대한 에러처리를 별도로 선언하여 pipeline을 연결해주어야 합니다.

// filecopy.js
const fs        = require('fs');
const stream    = require('stream');

(async () => {
    // Stream 선언
    const rs = fs.createReadStream('origin.txt');
    const ws = fs.createWriteStream('copied.txt');

    // Stream별 이벤트 선언
    rs.on('error', e => {
        throw e;
    })

    ws.on('error', e => {
        throw e;
    })

    ws.on('finish', () => {
        console.log('origin.txt파일이 copied.txt파일로 복사되었습니다.');
    })

    // Pipeline 연결
    stream.pipeline(rs, ws, err => {
        if(err) throw e;
    })
})();

만약 위의 소스 기준으로 origin.txt파일을 삭제하고 실행하면 아래와 같이 에러코드가 호출됩니다.

반응형