উত্তর:
সেপ্পো 10010 মন্তব্য অনুসারে, আমি এটি করতে পুনরায় নামকরণ ফাংশনটি ব্যবহার করেছি।
http://nodejs.org/docs/latest/api/fs.html#fs_fs_rename_oldpath_newpath_callback
fs.rename (ওল্ডপাথ, নিউপ্যাথ, কলব্যাক)
এতে যুক্ত হয়েছে: v0.0.2
oldPath <String> | <Buffer> newPath <String> | <Buffer> callback <Function>
অ্যাসিঙ্ক্রোনাস নামকরণ (2)। সম্ভাব্য ব্যতিক্রম ব্যতীত অন্য কোনও যুক্তি সম্পূর্ণ হওয়ার কলব্যাককে দেওয়া হয় না।
এই উদাহরণ থেকে নেওয়া: কর্মে নোড.জেস
একটি মুভ () ফাংশন যা সম্ভব হলে পুনরায় নামকরণ করে, বা অনুলিপি করে ফিরে যায়
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);
}
}
স্থানীয়ভাবে নোডেজ ব্যবহার করা
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!')
})
(দ্রষ্টব্য: "আপনি যদি পার্টিশনগুলি অতিক্রম করছেন বা চলন্ত ফাইলগুলিকে সমর্থন না করে এমন ভার্চুয়াল ফাইল সিস্টেম ব্যবহার করছেন তবে এটি কাজ করবে না। [...]" - ফ্ল্যাভিয়ান ভলকেন সেপ্টেম্বর 2 '15 এ 12:50 ")
এমভি নোড মডিউলটি ব্যবহার করুন যা প্রথমে একটি করার চেষ্টা করবে fs.rename
এবং তারপরে অনুলিপি করা এবং তারপরে লিঙ্কমুক্ত হবে।
mv
নোড মডিউলটির লেখক হিসাবে উপস্থিত হয়েছে । আমি এনপিএম ইনস্টল করতে ব্যবহার করতে চাই; npm install mv --save-dev
; এখানে এনপিএম লিঙ্কটি রয়েছে
util.pump
নোড ০.১০ এ অবহিত এবং সতর্কতা বার্তা উত্পন্ন করে
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.rename(getFileName, __dirname + '/new_folder/' + getFileName);
কোথায়
getFilename = file.extension (old path)
__dirname + '/new_folder/' + getFileName
ধরে নিচ্ছেন যে আপনি ফাইলের নামটি অপরিবর্তিত রাখতে চান।
fs-extra
আইকনএই মডিউলটি আপনাকে এটা সঙ্গে এই কাজ করতে পারবেন move()
পদ্ধতি। আমি ইতিমধ্যে এটি প্রয়োগ করেছি এবং আপনি যদি কোনও ফাইলকে একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে পুরোপুরি সরিয়ে নিতে চান - তবে এটি ভাল কাজ করে ie উত্স ডিরেক্টরি থেকে ফাইল অপসারণ। বেশিরভাগ বেসিক ক্ষেত্রে কাজ করা উচিত।
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!")
})
ব্যবহার.পাম্প ব্যবহার করে এখানে একটি উদাহরণ রয়েছে >> >> আমি কীভাবে ফাইলকে নোড.জেএসে একটি পৃথক বিভাজন বা ডিভাইসে স্থানান্তর করব?
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');
});
fs.rename()
(একটি ভলিউমের মধ্যে কোনও ফাইলের নাম পরিবর্তন এবং এটি সরানো একই জিনিস)।
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
আপনি ভলিউম সহ ডকার পরিবেশে থাকলে কেবল সতর্কতার কোনও শব্দ কার্যকর হয় না।
async
ঘোষণা যুক্ত করুন moveThem
।
উপরের উত্তরে বর্ণিত কেবল আমার 2 সেন্ট : সামান্য সমন্বয় ছাড়াই ফাইল অনুলিপি করার জন্য অনুলিপি () পদ্ধতিটি ব্যবহার করা উচিত নয়:
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);
})
তবে, মনে রাখবেন যে লক্ষ্য ফোল্ডারটি উপস্থিত না থাকলে ফাইল-সিস্টেম ক্র্যাশ হতে পারে।
আমি সব জড়িত ফাংশন পৃথক হবে (অর্থাত rename
, copy
, unlink
) অবশ্যই, নমনীয়তা এবং promisify জেতার জন্য সবকিছু একে অপরের থেকে:
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
কেবল একটি সুবিধাজনক ফাংশন এবং আমরা পৃথকভাবে ফাংশনগুলি প্রয়োগ করতে পারি, যখন উদাহরণস্বরূপ, আমাদের সূক্ষ্ম দানযুক্ত ব্যতিক্রম হ্যান্ডলিংয়ের প্রয়োজন হয়।
শেলজ একটি খুব সহজ সমাধান।
কমান্ড: এমভি ([বিকল্পসমূহ] উত্স, গন্তব্য)
উপলব্ধ বিকল্প:
-ফ: বল (ডিফল্ট আচরণ)
-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!');
এটি সামান্য কম অস্পষ্ট নামের সাথে তেওমন শিপাহির জবাবের পুনঃস্থাপন এবং আপনি এটির কল দেওয়ার চেষ্টা করার আগে কোড সংজ্ঞায়নের নকশা প্রিপিসল অনুসরণ করছেন। (নোড আপনাকে অন্যথায় কাজ করার অনুমতি দেয় তবে ঘোড়ার আগে কার্টটি রাখা ভাল অভ্যাস নয়))
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();
}
);
}
নীচে ইউআরএল এর সাহায্যে আপনি হয় আপনার ফাইল অনুলিপি উত্স থেকে গন্তব্য উত্স অনুলিপি বা সরাতে পারেন
/*********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 *********/
আপনি যদি কোনও নোড.জেএস উত্স ফাইল সরানো বা নামকরণের চেষ্টা করছেন তবে এই https://github.com/viruschidai/node-mv ব্যবহার করে দেখুন । এটি অন্যান্য ফাইলগুলিতে সেই ফাইলের উল্লেখগুলি আপডেট করবে।
আপনি move-file
এনপিএম প্যাকেজটি ব্যবহার করতে পারেন :
প্রথমে প্যাকেজটি ইনস্টল করুন:
$ npm install move-file
ব্যবহার:
const moveFile = require('move-file');
// moveFile Returns a Promise that resolves when the file has been moved
moveFile('source/unicorn.png', 'destination/unicorn.png')
.then(() => {/* Handle success */})
.catch((err) => {/* Handle failure */});
// Or use async/await
(async () => {
try {
await moveFile('source/unicorn.png', 'destination/unicorn.png');
console.log('The file has been moved');
} catch (err) {
// Handle failure
console.error(err);
}
})();