সম্পাদন করা
নোডজেএস সংস্করণ 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') { // curDir already exists!
return curDir;
}
// To avoid `EISDIR` error on Mac and `EACCES`-->`ENOENT` and `EPERM` on Windows.
if (err.code === 'ENOENT') { // Throw the original parentDir error on curDir `ENOENT` failure.
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; // Throw if it's just the last created dir.
}
}
return curDir;
}, initDir);
}
ব্যবহার
// Default, make directories relative to current working directory.
mkDirByPathSync('path/to/dir');
// Make directories relative to the current script.
mkDirByPathSync('path/to/dir', {isRelativeToScript: true});
// Make directories with an absolute path.
mkDirByPathSync('/path/to/dir');
ডেমো
এটি চেষ্টা করুন!
ব্যাখ্যা
- [২] মত এই সমাধান হ্যান্ডলগুলি প্ল্যাটফর্ম-নির্দিষ্ট ত্রুটি
EISDIR
ম্যাক এবং জন্য EPERM
এবং EACCES
Windows এর জন্য। @ পেডিটি।, @ জনকিউ, @ ডিড02392, @ রবিওডার এবং @ অ্যালম্যাননের সমস্ত প্রতিবেদনের মন্তব্যে ধন্যবাদ।
- এই সমাধানটি আপেক্ষিক এবং পরম পথ উভয়ই পরিচালনা করে। @ জোহান মন্তব্য করার জন্য ধন্যবাদ।
- আপেক্ষিক পাথের ক্ষেত্রে, বর্তমান কার্যনির্বাহী ডিরেক্টরিতে লক্ষ্য ডিরেক্টরিগুলি তৈরি করা হবে (সমাধান করা)। এগুলি বর্তমান স্ক্রিপ্টের তুলনায় সমাধান করার জন্য, পাস করুন
{isRelativeToScript: true}
।
- ক্রস প্ল্যাটফর্মের সমস্যাগুলি এড়াতে কেবল কনটেক্সটেশন নয়, ব্যবহার
path.sep
এবং ।path.resolve()
/
- জাতির শর্তগুলি পরিচালনা করতে যদি ফেলে দেওয়া হয় তবে এর
fs.mkdirSync
সাথে ত্রুটিটি ব্যবহার করা এবং পরিচালনা করা try/catch
: অন্য একটি প্রক্রিয়া কলগুলির মধ্যে ফাইল যুক্ত করতে পারে fs.existsSync()
এবং fs.mkdirSync()
ব্যতিক্রম ঘটায়।
- এটি অর্জনের অন্য উপায়টি যদি কোনও ফাইল উপস্থিত থাকে কিনা তা পরীক্ষা করে দেখাতে পারে, অর্থাত্, এটি
if (!fs.existsSync(curDir) fs.mkdirSync(curDir);
। তবে এটি একটি অ্যান্টি-প্যাটার্ন যা কোডটি রেস শর্তে দুর্বল করে leaves ডিরেক্টর অস্তিত্ব চেক সম্পর্কে @ জারশমমেস মন্তব্যকে ধন্যবাদ জানাই।
- ডেস্ট্রাকচারিং সমর্থন করার জন্য নোড ভি 6 এবং আরও নতুন প্রয়োজন । (আপনার যদি পুরানো নোড সংস্করণ দিয়ে এই সমাধানটি কার্যকর করতে সমস্যা হয় তবে আমাকে কেবল একটি মন্তব্য দিন)