node.js에서 파일을 이동하려면 어떻게 해야 합니까?
node.js에서 mv 명령 셸과 같은 파일을 이동하려면 어떻게 해야 합니까?이를 위한 방법이 있습니까? 아니면 파일을 읽고 새 파일에 쓰고 이전 파일을 제거해야 합니까?
seppo0010 comment에 따르면, 저는 그것을 하기 위해 rename 기능을 사용했습니다.
http://nodejs.org/docs/latest/api/fs.html#fs_fs_rename_oldpath_newpath_callback
fs.rename(oldPath, newPath, 콜백)
추가 위치: v0.0.2
oldPath <String> | <Buffer> newPath <String> | <Buffer> callback <Function>비동기식 이름 바꾸기(2).완료 콜백에 가능한 예외 이외의 인수가 제공되지 않습니다.
nodejs를 기본적으로 사용
var fs = require('fs')
var oldPath = 'old/path/file.txt'
var newPath = 'new/path/file.txt'
fs.rename(oldPath, newPath, function (err) {
if (err) throw err
console.log('Successfully renamed - AKA moved!')
})
(참고: "파티션을 교차하거나 파일 이동을 지원하지 않는 가상 파일 시스템을 사용하는 경우에는 작동하지 않습니다. [...] – Flavien Volken 2015년 9월 2일 12:50")
이 예는 다음과 같습니다.작업 중인 Node.js
가능한 경우 이름을 바꾸거나 복사로 되돌리는 이동() 함수
var fs = require('fs');
module.exports = function move(oldPath, newPath, callback) {
fs.rename(oldPath, newPath, function (err) {
if (err) {
if (err.code === 'EXDEV') {
copy();
} else {
callback(err);
}
return;
}
callback();
});
function copy() {
var readStream = fs.createReadStream(oldPath);
var writeStream = fs.createWriteStream(newPath);
readStream.on('error', callback);
writeStream.on('error', callback);
readStream.on('close', function () {
fs.unlink(oldPath, callback);
});
readStream.pipe(writeStream);
}
}
mv 노드 모듈을 사용합니다. mv 노드 모듈은 먼저 다음 작업을 시도합니다.fs.rename다시 복사하고 연결을 해제합니다.
util.pump 0더되지 않으며 "0.10"을 합니다.
util.pump() is deprecated. Use readableStream.pipe() instead
따라서 스트림을 사용하여 파일을 복사하는 솔루션은 다음과 같습니다.
var source = fs.createReadStream('/path/to/source');
var dest = fs.createWriteStream('/path/to/dest');
source.pipe(dest);
source.on('end', function() { /* copied */ });
source.on('error', function(err) { /* error */ });
그fs-extra을 사용하면 하여 이 할 수 있습니다.move(). 한을 완전히 합니다. 합니다.이미 구현했으며 한 디렉터리에서 다른 디렉터리로 파일을 완전히 이동하려면 잘 작동합니다. 즉, 원본 디렉터리에서 파일을 제거하는 것입니다.대부분의 기본적인 경우에 효과가 있어야 합니다.
var fs = require('fs-extra')
fs.move('/tmp/somefile', '/tmp/does/not/exist/yet/somefile', function (err) {
if (err) return console.error(err)
console.log("success!")
})
8.0.0보다 큰 노드 버전에 대해 약속 사용:
const {promisify} = require('util');
const fs = require('fs');
const {join} = require('path');
const mv = promisify(fs.rename);
const moveThem = async () => {
// Move file ./bar/foo.js to ./baz/qux.js
const original = join(__dirname, 'bar/foo.js');
const target = join(__dirname, 'baz/qux.js');
await mv(original, target);
}
moveThem();
이름 바꾸기 기능 사용:
fs.rename(getFileName, __dirname + '/new_folder/' + getFileName);
어디에
getFilename = file.extension (old path)
__dirname + '/new_folder/' + getFileName
파일 이름을 변경하지 않고 유지하려고 가정합니다.
여기 util을 사용한 예가 있습니다.펌프, >>에서 파일 a를 Node.js의 다른 파티션이나 장치로 이동하려면 어떻게 해야 합니까?
var fs = require('fs'),
util = require('util');
var is = fs.createReadStream('source_file')
var os = fs.createWriteStream('destination_file');
util.pump(is, os, function() {
fs.unlinkSync('source_file');
});
위의 답변에 명시된 바와 같이 단 2센트: copy() 방법은 약간의 조정 없이 파일을 복사하는 데 그대로 사용되어서는 안 됩니다.
function copy(callback) {
var readStream = fs.createReadStream(oldPath);
var writeStream = fs.createWriteStream(newPath);
readStream.on('error', callback);
writeStream.on('error', callback);
// Do not callback() upon "close" event on the readStream
// readStream.on('close', function () {
// Do instead upon "close" on the writeStream
writeStream.on('close', function () {
callback();
});
readStream.pipe(writeStream);
}
약속으로 포장된 복사 기능:
function copy(oldPath, newPath) {
return new Promise((resolve, reject) => {
const readStream = fs.createReadStream(oldPath);
const writeStream = fs.createWriteStream(newPath);
readStream.on('error', err => reject(err));
writeStream.on('error', err => reject(err));
writeStream.on('close', function() {
resolve();
});
readStream.pipe(writeStream);
})
그러나 대상 폴더가 없는 경우 파일 시스템이 충돌할 수 있습니다.
된 모든 관된모기분예니다리합을능든련예▁((▁all다)을 합니다.rename,copy,unlink것을 약속하기 로서에게서유:)얻고모든위물해론약것기속하을연을:
const renameFile = (path, newPath) =>
new Promise((res, rej) => {
fs.rename(path, newPath, (err, data) =>
err
? rej(err)
: res(data));
});
const copyFile = (path, newPath, flags) =>
new Promise((res, rej) => {
const readStream = fs.createReadStream(path),
writeStream = fs.createWriteStream(newPath, {flags});
readStream.on("error", rej);
writeStream.on("error", rej);
writeStream.on("finish", res);
readStream.pipe(writeStream);
});
const unlinkFile = path =>
new Promise((res, rej) => {
fs.unlink(path, (err, data) =>
err
? rej(err)
: res(data));
});
const moveFile = (path, newPath, flags) =>
renameFile(path, newPath)
.catch(e => {
if (e.code !== "EXDEV")
throw new e;
else
return copyFile(path, newPath, flags)
.then(() => unlinkFile(path));
});
moveFile편의 기능일 뿐이며, 예를 들어 세부적인 예외 처리가 필요한 경우 기능을 별도로 적용할 수 있습니다.
fs.rename동기화 버전에서도 사용할 수 있습니다.
fs.renameSync(oldPath, newPath)
외부 라이브러리를 사용해도 괜찮다면 Shelljs는 매우 편리한 솔루션입니다.
명령: mv([source,] source, destination)
사용 가능한 옵션:
-f: 힘(기본 동작)
-n: 덮어쓰기 방지
const shell = require('shelljs');
const status = shell.mv('README.md', '/home/my-dir');
if(status.stderr) console.log(status.stderr);
else console.log('File moved!');
이것은 teomanshipahi의 대답을 약간 덜 모호한 이름으로 재탕한 것이며, 당신이 그것을 부르려고 시도하기 전에 코드를 정의하는 설계 원칙을 따릅니다. (다른 것을 허용하는 노드는 없지만, 카트를 말 앞에 놓는 것은 좋은 관행이 아닙니다.)
function rename_or_copy_and_delete (oldPath, newPath, callback) {
function copy_and_delete () {
var readStream = fs.createReadStream(oldPath);
var writeStream = fs.createWriteStream(newPath);
readStream.on('error', callback);
writeStream.on('error', callback);
readStream.on('close',
function () {
fs.unlink(oldPath, callback);
}
);
readStream.pipe(writeStream);
}
fs.rename(oldPath, newPath,
function (err) {
if (err) {
if (err.code === 'EXDEV') {
copy_and_delete();
} else {
callback(err);
}
return;// << both cases (err/copy_and_delete)
}
callback();
}
);
}
node.js 원본 파일을 이동하거나 이름을 바꾸려면 이 https://github.com/viruschidai/node-mv 을 사용하십시오.그러면 다른 모든 파일에서 해당 파일에 대한 참조가 업데이트됩니다.
아래 URL을 사용하여 파일을 복사하거나 대상 소스로 이동할 수 있습니다.
/*********Moves the $file to $dir2 Start *********/
var moveFile = (file, dir2)=>{
//include the fs, path modules
var fs = require('fs');
var path = require('path');
//gets file name and adds it to dir2
var f = path.basename(file);
var dest = path.resolve(dir2, f);
fs.rename(file, dest, (err)=>{
if(err) throw err;
else console.log('Successfully moved');
});
};
//move file1.htm from 'test/' to 'test/dir_1/'
moveFile('./test/file1.htm', './test/dir_1/');
/*********Moves the $file to $dir2 END *********/
/*********copy the $file to $dir2 Start *********/
var copyFile = (file, dir2)=>{
//include the fs, path modules
var fs = require('fs');
var path = require('path');
//gets file name and adds it to dir2
var f = path.basename(file);
var source = fs.createReadStream(file);
var dest = fs.createWriteStream(path.resolve(dir2, f));
source.pipe(dest);
source.on('end', function() { console.log('Succesfully copied'); });
source.on('error', function(err) { console.log(err); });
};
//example, copy file1.htm from 'test/dir_1/' to 'test/'
copyFile('./test/dir_1/file1.htm', './test/');
/*********copy the $file to $dir2 END *********/
Node.js v10.0.0+
const fs = require('fs')
const { promisify } = require('util')
const pipeline = promisify(require('stream').pipeline)
await pipeline(
fs.createReadStream('source/file/path'),
fs.createWriteStream('destination/file/path')
).catch(err => {
// error handling
})
fs.unlink('source/file/path')
언급URL : https://stackoverflow.com/questions/8579055/how-do-i-move-files-in-node-js
'programing' 카테고리의 다른 글
| OK(확인) 및 Cancel(취소)이 표시된 신속한 경고 보기: 어떤 버튼을 눌렀습니까? (0) | 2023.05.14 |
|---|---|
| 3에서 6 사이의 랜덤 int 값 생성 (0) | 2023.05.14 |
| Grep '이진 파일 일치'입니다.정상적인 grep 출력을 얻는 방법은 무엇입니까? (0) | 2023.05.14 |
| Windows 사용자 표시 이름 가져오기 (0) | 2023.05.14 |
| SQL Server 하위 쿼리가 1개 이상의 값을 반환했습니다.하위 쿼리가 =, !=, <, <=, >, >=를 따르는 경우에는 허용되지 않습니다. (0) | 2023.05.14 |