Node.js sendiri tidak menyediakan API untuk secara langsung menyalin file. Jika Anda ingin menyalin file atau direktori dengan node.js, Anda perlu menggunakan API lain untuk mengimplementasikannya. Anda dapat menggunakan ReadFile dan WriteFile secara langsung untuk menyalin satu file, yang lebih mudah. Jika Anda menyalin semua file di direktori, dan direktori juga dapat berisi subdirektori, maka Anda perlu menggunakan API yang lebih canggih.
mengalir
Stream adalah cara Node.js memindahkan data. Stream di Node.js dapat dibaca/dapat ditulis, dan baik modul sistem http dan file menggunakan aliran. Di sistem file, saat menggunakan aliran untuk membaca file, file besar mungkin tidak dibaca sekaligus, tetapi akan dibaca beberapa kali. Saat membaca, itu akan menanggapi acara data. Anda dapat beroperasi pada data yang dibaca sebelum file dibaca. Demikian pula, saat menulis ke aliran, file besar tidak ditulis pada satu waktu, seperti saat membaca. Cara memindahkan data ini sangat efisien, terutama untuk file besar. Menggunakan aliran jauh lebih cepat daripada menunggu semua file besar dibaca sebelum mengoperasikan file.
pipa
Jika Anda ingin memiliki kontrol penuh saat membaca dan menulis aliran, Anda dapat menggunakan acara data. Tetapi untuk replikasi file sederhana, baca aliran dan streaming tulis dapat mentransfer data melalui pipa.
Aplikasi Praktis:
Salinan kode adalah sebagai berikut:
var fs = membutuhkan ('fs'),
stat = fs.stat;
/*
* Salin semua file di direktori termasuk subdirektori
* @param {string} direktori yang perlu disalin
* @param {String} Salin ke direktori yang ditentukan
*/
var copy = function (src, dst) {
// Baca semua file/direktori di direktori
fs.readdir (src, function (err, paths) {
if (err) {
Lempar err;
}
paths.foreach (function (path) {
var _src = src + '/' + path,
_dst = dst + '/' + path,
dapat dibaca, dapat ditulis;
stat (_src, function (err, st) {
if (err) {
Lempar err;
}
// Tentukan apakah itu file
if (st.isfile ()) {
// Buat aliran baca
dapat dibaca = fs.createreadstream (_src);
// Buat aliran tulis
writable = fs.createWriteStream (_dst);
// Transfer aliran melalui pipa
readable.pipe (writable);
}
// Jika itu adalah direktori, panggil dirinya sendiri secara rekursif
lain if (st.isdirectory ()) {
ada (_src, _dst, copy);
}
});
});
});
};
// Sebelum menyalin direktori, Anda perlu menentukan apakah direktori ada. Jika tidak ada, Anda perlu membuat direktori terlebih dahulu.
var exist = function (src, dst, callback) {
fs.exists (dst, function (ada) {
// sudah ada
if (ada) {
Callback (SRC, DST);
}
// tidak ada
kalau tidak{
fs.mkdir (dst, function () {
Callback (SRC, DST);
});
}
});
};
// salin direktori
ada ('./src', './build', salin);