node.js自体は、ファイルを直接コピーするためのAPIを提供しません。 node.jsでファイルまたはディレクトリをコピーする場合は、他のAPIを使用して実装する必要があります。 ReadFileとWriteFileを使用して、1つのファイルをコピーすることができます。これは簡単です。すべてのファイルをディレクトリにコピーし、ディレクトリにサブディレクトリが含まれている場合は、より高度なAPIを使用する必要があります。
流れ
ストリームは、node.jsがデータを移動する方法です。 node.jsのストリームは読み取り可能/書き込み可能であり、HTTPとファイルシステムモジュールの両方がストリームを使用します。ファイルシステムでは、ストリームを使用してファイルを読み取る場合、大きなファイルは一度に読み取られない場合がありますが、数回読み取られます。読むとき、それはデータイベントに応答します。ファイルが読み取られる前に、読み取りデータで動作できます。同様に、ストリームに書き込むとき、読んでいるときと同じように、大きなファイルは一度に書かれていません。データを移動するこの方法は、特に大きなファイルでは非常に効率的です。ストリームの使用は、ファイルを操作する前にすべての大きなファイルが読み取られるのを待つよりもはるかに高速です。
パイプライン
ストリームを読み書きするときに完全に制御したい場合は、データイベントを使用できます。ただし、簡単なファイルレプリケーションの場合、ストリームを読み取り、書き込みストリームはパイプラインを介してデータを転送できます。
実用アプリケーション:
コードコピーは次のとおりです。
var fs = require( 'fs')、
stat = fs.stat;
/*
*サブディレクトリを含むディレクトリ内のすべてのファイルをコピーします
* @param {string}コピーする必要があるディレクトリ
* @param {string}指定されたディレクトリにコピーします
*/
var copy = function(src、dst){
//ディレクトリ内のすべてのファイル/ディレクトリを読み取ります
fs.readdir(src、function(err、paths){
if(err){
エラーを投げます。
}
paths.foreach(function(path){
var _src = src + '/' +パス、
_dst = dst + '/' +パス、
読みやすく、書き込み可能。
stat(_src、function(err、st){
if(err){
エラーを投げます。
}
//ファイルかどうかを判断します
if(St.isfile()){
//読み取りストリームを作成します
Readable = fseatereadStream(_SRC);
//書き込みストリームを作成します
writable = fs.createwritestream(_dst);
//パイプラインを介してストリームを転送します
readable.pipe(writable);
}
//それがディレクトリの場合、再帰的に自体を呼び出します
else if(st.isdirectory()){
存在する(_SRC、_DST、コピー);
}
});
});
});
};
//ディレクトリをコピーする前に、ディレクトリが存在するかどうかを判断する必要があります。存在しない場合は、最初にディレクトリを作成する必要があります。
var exists = function(src、dst、callback){
fs.exists(dst、function(exists){
//すでに存在します
if(存在する){
コールバック(SRC、DST);
}
//存在しません
それ以外{
fs.mkdir(dst、function(){
コールバック(SRC、DST);
});
}
});
};
//ディレクトリをコピーします
存在する( './src'、 './build'、copy);