情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでファイルをコピーする

2016/04/03

ファイルをコピーするにはコピー元のファイルの内容を読み込み、コピー先のファイルにその内容を書き込まなければなりません。


ファイルの内容を読み込むストリームを作成するにはfs.createReadStream関数を使用します。

fs.createReadStream関数の詳しい使い方に関しては下の記事を参照してください。

ただし、ファイルをコピーする場合にはテキストファイルとして読み込むのではなくバイナリファイルとして読み込まなければならないので、ストリームを作成する際には文字コードを指定しないでおきます(文字コードを指定しないでおくとバイナリファイルとして読み込むことができます)。


ファイルに内容を書き込むストリームを作成するにはfs.createWriteStream関数を呼び出します。

fs.createWriteStream関数の詳しい使い方に関しては下の記事を参照してください。

ただし、ファイルをコピーする場合にはテキストファイルとして書き込むのではなくバイナリファイルとして書き込まなければならないので、ストリームを作成する際には文字コードを指定しないでおきます(文字コードを指定しないでおくとバイナリファイルとして書き込むことができます)。


そして、stream.Readable.pipe関数でファイルの内容を読み込むストリームにファイルに内容を書き込むストリームを接続します。

これにより、コピー元のファイルからコピー先のファイルに内容をそのままコピーすることができます。


なお、ストリームの詳しい使い方に関しては下の記事を参照してください。

サンプルコード1

コマンドライン引数として与えられたファイルをコマンドライン引数として与えられたファイルにコピーします。

copy-file.js

var fs = require('fs');

if (process.argv.length < 4) {
    console.error('lack argument.');
    process.exit(1);
}

try {
    var rs = fs.createReadStream(process.argv[2]);
    rs.on('error', function (err) {
        console.error(err);
        process.exit(1);
    });
    var ws = fs.createWriteStream(process.argv[3]);
    ws.on('finish', function (err) {
        console.log('finished!!');
    });
    ws.on('error', function (err) {
        console.error(err);
        process.exit(1);
    });
    rs.pipe(ws);
}
catch (err) {
    console.error(err);
    process.exit(1);
}

実行結果

C:\work\node>type textfile.txt
テキストファイルです。
C:\work\node>node copy-file.js textfile.txt textfile2.txt
finished!!

C:\work\node>type textfile2.txt
テキストファイルです。

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js