Node.js เองไม่ได้ให้ API สำหรับการคัดลอกไฟล์โดยตรง หากคุณต้องการคัดลอกไฟล์หรือไดเรกทอรีด้วย node.js คุณต้องใช้ API อื่น ๆ เพื่อใช้งาน คุณสามารถใช้ ReadFile และ WriteFile โดยตรงเพื่อคัดลอกไฟล์เดียวซึ่งง่ายกว่า หากคุณคัดลอกไฟล์ทั้งหมดในไดเรกทอรีและไดเรกทอรีอาจมีไดเรกทอรีย่อยคุณต้องใช้ API ขั้นสูงมากขึ้น
ไหล
สตรีมเป็นวิธีที่ Node.js ย้ายข้อมูล สตรีมใน node.js สามารถอ่านได้/เขียนได้และทั้ง HTTP และโมดูลระบบไฟล์ใช้สตรีม ในระบบไฟล์เมื่อใช้สตรีมเพื่ออ่านไฟล์ไฟล์ขนาดใหญ่อาจไม่สามารถอ่านได้ในครั้งเดียว แต่จะอ่านหลายครั้ง เมื่ออ่านมันจะตอบสนองต่อเหตุการณ์ข้อมูล คุณสามารถใช้งานกับข้อมูลการอ่านก่อนที่จะอ่านไฟล์ ในทำนองเดียวกันเมื่อเขียนไปยังสตรีมไฟล์ขนาดใหญ่จะไม่ถูกเขียนในครั้งเดียวเหมือนเมื่ออ่าน วิธีการย้ายข้อมูลนี้มีประสิทธิภาพมากโดยเฉพาะอย่างยิ่งสำหรับไฟล์ขนาดใหญ่ การใช้สตรีมนั้นเร็วกว่าการรอให้อ่านไฟล์ขนาดใหญ่ทั้งหมดก่อนที่จะใช้งานไฟล์
ท่อส่ง
หากคุณต้องการควบคุมอย่างสมบูรณ์เมื่ออ่านและเขียนสตรีมคุณสามารถใช้กิจกรรมข้อมูล แต่สำหรับการจำลองไฟล์อย่างง่ายอ่านสตรีมและสตรีมการเขียนสามารถถ่ายโอนข้อมูลผ่านท่อ
การใช้งานจริง:
การคัดลอกรหัสมีดังนี้:
var fs = ต้องการ ('fs')
stat = fs.stat;
-
* คัดลอกไฟล์ทั้งหมดในไดเรกทอรีรวมถึงไดเรกทอรีย่อย
* @param {String} ไดเรกทอรีที่ต้องคัดลอก
* @param {String} คัดลอกไปยังไดเรกทอรีที่ระบุ
-
var copy = function (src, dst) {
// อ่านไฟล์/ไดเรกทอรีทั้งหมดในไดเรกทอรี
fs.readdir (src, function (err, paths) {
ถ้า (err) {
โยนเอ่อ;
-
paths.foreach (ฟังก์ชั่น (เส้นทาง) {
var _src = src + '/' + เส้นทาง
_dst = dst + '/' + เส้นทาง
อ่านง่ายเขียนได้
Stat (_src, ฟังก์ชัน (err, st) {
ถ้า (err) {
โยนเอ่อ;
-
// พิจารณาว่าเป็นไฟล์
ถ้า (St.isfile ()) {
// สร้างสตรีมการอ่าน
อ่านได้ = fs.createReadStream (_SRC);
// สร้างสตรีมการเขียน
เขียนได้ = fs.createwritestream (_dst);
// ถ่ายโอนสตรีมผ่านท่อ
อ่านได้. pipe (เขียนได้);
-
// ถ้าเป็นไดเรกทอรีโทรตัวเองซ้ำ
อื่นถ้า (St.Isdirectory ()) {
มีอยู่ (_src, _dst, คัดลอก);
-
-
-
-
-
// ก่อนคัดลอกไดเรกทอรีคุณต้องพิจารณาว่ามีไดเรกทอรีอยู่หรือไม่ หากไม่มีอยู่คุณจะต้องสร้างไดเรกทอรีก่อน
Var Esing = function (src, dst, callback) {
fs.exists (dst, function (มีอยู่) {
// มีอยู่แล้ว
ถ้า (มีอยู่) {
การโทรกลับ (SRC, DST);
-
// ไม่มีอยู่จริง
อื่น{
fs.mkdir (dst, function () {
การโทรกลับ (SRC, DST);
-
-
-
-
// คัดลอกไดเรกทอรี
มีอยู่ ('./src', './build', คัดลอก);