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) {
if (err) {
오류를 던지십시오.
}
paths.foreach (function (path) {
var _src = src + '/' + 경로,
_dst = dst + '/' + 경로,
읽기 쉬운, 쓰기 가능;
stat (_src, function (err, st) {
if (err) {
오류를 던지십시오.
}
// 파일인지 확인합니다
if (st.isfile ()) {
// 읽기 스트림을 만듭니다
readable = fs.createreadstream (_src);
// 쓰기 스트림을 만듭니다
쓰기 가능 = fs.createwritestream (_dst);
// 파이프 라인을 통해 스트림을 전송합니다
readable.pipe (쓰기 가능);
}
// 디렉토리 인 경우 재귀 적으로 호출하십시오
else if (st.isdirectory ()) {
존재 (_src, _dst, copy);
}
});
});
});
};
// 디렉토리를 복사하기 전에 디렉토리가 존재하는지 확인해야합니다. 존재하지 않으면 먼저 디렉토리를 만들어야합니다.
var ensists = function (src, dst, 콜백) {
fs.exists (dst, function (Exists) {
// 이미 존재합니다
if (존재) {
콜백 (SRC, DST);
}
// 존재하지 않습니다
또 다른{
fs.mkdir (dst, function () {
콜백 (SRC, DST);
});
}
});
};
// 디렉토리를 복사합니다
존재 ( './src', './build', copy);