সম্পাদনা করুন
নোডজেএস সংস্করণ নীচের হিসাবে বিকল্প হিসাবে পুনরাবৃত্তভাবে পিতামাতা পরিচালক তৈরি এবং 10.12.0
উভয়ের জন্য একটি স্থানীয় সমর্থন যুক্ত করেছে :mkdir
mkdirSync
recursive: true
fs.mkdirSync(targetDir, { recursive: true });
এবং আপনি যদি পছন্দ করেন fs Promises API
, আপনি লিখতে পারেন
fs.promises.mkdir(targetDir, { recursive: true });
আসল উত্তর
অভিভাবক ডিরেক্টরিগুলি উপস্থিত না থাকলে পুনরাবৃত্তভাবে তৈরি করুন! ( জিরো নির্ভরতা )
const fs = require('fs');
const path = require('path');
function mkDirByPathSync(targetDir, { isRelativeToScript = false } = {}) {
const sep = path.sep;
const initDir = path.isAbsolute(targetDir) ? sep : '';
const baseDir = isRelativeToScript ? __dirname : '.';
return targetDir.split(sep).reduce((parentDir, childDir) => {
const curDir = path.resolve(baseDir, parentDir, childDir);
try {
fs.mkdirSync(curDir);
} catch (err) {
if (err.code === 'EEXIST') {
return curDir;
}
if (err.code === 'ENOENT') {
throw new Error(`EACCES: permission denied, mkdir '${parentDir}'`);
}
const caughtErr = ['EACCES', 'EPERM', 'EISDIR'].indexOf(err.code) > -1;
if (!caughtErr || caughtErr && curDir === path.resolve(targetDir)) {
throw err;
}
}
return curDir;
}, initDir);
}
ব্যবহার
mkDirByPathSync('path/to/dir');
mkDirByPathSync('path/to/dir', {isRelativeToScript: true});
mkDirByPathSync('/path/to/dir');
ডেমো
এটি চেষ্টা করুন!
ব্যাখ্যা
- [২] মত এই সমাধান হ্যান্ডলগুলি প্ল্যাটফর্ম-নির্দিষ্ট ত্রুটি
EISDIR
ম্যাক এবং জন্য EPERM
এবং EACCES
Windows এর জন্য।
- এই সমাধানটি আপেক্ষিক এবং পরম পথ উভয়ই পরিচালনা করে।
- আপেক্ষিক পাথের ক্ষেত্রে, বর্তমান কার্যনির্বাহী ডিরেক্টরিতে লক্ষ্য ডিরেক্টরিগুলি তৈরি করা হবে (সমাধান করা)। এগুলি বর্তমান স্ক্রিপ্টের তুলনায় সমাধানের জন্য, পাস করুন
{isRelativeToScript: true}
।
- ক্রস প্ল্যাটফর্মের সমস্যাগুলি এড়াতে কেবল কনটেক্সটেশন নয়, ব্যবহার
path.sep
এবং ।path.resolve()
/
- জাতির শর্তগুলি পরিচালনা করতে যদি ফেলে দেওয়া হয় তবে এর
fs.mkdirSync
সাথে ত্রুটিটি ব্যবহার করা এবং পরিচালনা করা try/catch
: অন্য একটি প্রক্রিয়া কলগুলির মধ্যে ফাইল যুক্ত করতে পারে fs.existsSync()
এবং fs.mkdirSync()
ব্যতিক্রম ঘটায়।
- এটি অর্জনের অন্য উপায়টি যদি কোনও ফাইল উপস্থিত থাকে কিনা তা পরীক্ষা করে দেখাতে পারে, অর্থাত্, এটি
if (!fs.existsSync(curDir) fs.mkdirSync(curDir);
। তবে এটি একটি অ্যান্টি-প্যাটার্ন যা কোডটি রেস শর্তের জন্য দুর্বল করে।
- ডেস্ট্রাকচারিং সমর্থন করার জন্য নোড ভি 6 এবং আরও নতুন প্রয়োজন । (আপনার যদি পুরানো নোড সংস্করণ দিয়ে এই সমাধানটি কার্যকর করতে সমস্যা হয় তবে আমাকে কেবল একটি মন্তব্য দিন)
fs.promises.mkdir(path.dirname('/folder1/folder2/file.txt'), {recursive: true}).then(x => fs.promises.writeFile('/folder1/folder2/file.txt', 'content'))