আমি এমন কোনও অনুসন্ধানের ফলাফল পেয়েছি বলে মনে হচ্ছে না যা এটি কীভাবে করতে হয় তা ব্যাখ্যা করে।
আমি যা করতে চাই তা প্রদত্ত পাথটি কোনও ফাইল বা ডিরেক্টরি (ফোল্ডার) কিনা তা জানতে সক্ষম।
আমি এমন কোনও অনুসন্ধানের ফলাফল পেয়েছি বলে মনে হচ্ছে না যা এটি কীভাবে করতে হয় তা ব্যাখ্যা করে।
আমি যা করতে চাই তা প্রদত্ত পাথটি কোনও ফাইল বা ডিরেক্টরি (ফোল্ডার) কিনা তা জানতে সক্ষম।
উত্তর:
fs.lstatSync(path_string).isDirectory()আপনাকে বলা উচিত। ডক্স থেকে :
Fs.stat () এবং fs.lstat () থেকে ফিরে আসা বস্তুগুলি এই ধরণের।
stats.isFile() stats.isDirectory() stats.isBlockDevice() stats.isCharacterDevice() stats.isSymbolicLink() (only valid with fs.lstat()) stats.isFIFO() stats.isSocket()
সমাধান উপরে হবে throwএকটি Errorযদি; প্রাক্তন জন্য, না fileবা directoryবিদ্যমান নেই।
যদি আপনি কোনও মতামত চান trueবা নীচে চান তবে নীচের মন্তব্যে জোসেফের দ্বারা বর্ণিত falseচেষ্টা করুন fs.existsSync(dirPath) && fs.lstatSync(dirPath).isDirectory();।
let isDirExists = fs.existsSync(dirPath) && fs.lstatSync(dirPath).isDirectory();
আমরা নতুন fs.promises API ব্যবহার করতে পারি
const fs = require('fs').promises;
(async() => {
const stat = await fs.lstat('test.txt');
console.log(stat.isFile());
})().catch(console.error)
এখানে আপনি কীভাবে সনাক্ত করতে পারবেন যে কোনও পথ কোনও ফাইল বা ডিরেক্টরি অ্যাসিক্রোনোনালিভাবে হয় , যা নোডের প্রস্তাবিত পদ্ধতির। fs.lstat ব্যবহার করে
const fs = require("fs");
let path = "/path/to/something";
fs.lstat(path, (err, stats) => {
if(err)
return console.log(err); //Handle error
console.log(`Is file: ${stats.isFile()}`);
console.log(`Is directory: ${stats.isDirectory()}`);
console.log(`Is symbolic link: ${stats.isSymbolicLink()}`);
console.log(`Is FIFO: ${stats.isFIFO()}`);
console.log(`Is socket: ${stats.isSocket()}`);
console.log(`Is character device: ${stats.isCharacterDevice()}`);
console.log(`Is block device: ${stats.isBlockDevice()}`);
});
সিঙ্ক্রোনাস এপিআই ব্যবহার করার সময় নোট করুন:
সিঙ্ক্রোনাস ফর্ম ব্যবহার করার সাথে সাথে কোনও ব্যতিক্রম তত্ক্ষণাত নিক্ষেপ করা হয়। আপনি ব্যতিক্রমগুলি পরিচালনা করতে চেষ্টা করতে / ধরতে বা তাদের বুদ্বুদ করতে অনুমতি দিতে পারেন।
try{
fs.lstatSync("/some/path").isDirectory()
}catch(e){
// Handle error
if(e.code == 'ENOENT'){
//no such file or directory
//do something
}else {
//do something else
}
}
আপনার প্রয়োজনের উপর নির্ভর করে আপনি সম্ভবত নোডের pathমডিউলটির উপর নির্ভর করতে পারেন ।
আপনি ফাইল সিস্টেমে আঘাত করতে সক্ষম হবেন না (উদাহরণস্বরূপ ফাইলটি এখনও তৈরি হয়নি) এবং tbh আপনি সম্ভবত অতিরিক্ত সিস্টেমের সত্যতা প্রয়োজন না হলে আপনি সম্ভবত ফাইল সিস্টেমে আঘাত করা এড়াতে চান। আপনি যদি অনুমান করতে পারেন যে আপনি নীচের .<extname>ফর্ম্যাটটির জন্য যা যাচাই করছেন , কেবল নামটি দেখুন।
স্পষ্টতই যদি আপনি কোনও নাম ছাড়াই একটি ফাইল সন্ধান করছেন তবে আপনার অবশ্যই নিশ্চিত হওয়ার জন্য ফাইল সিস্টেমটিকে আঘাত করতে হবে। তবে আপনার আরও জটিল হওয়ার প্রয়োজন পর্যন্ত এটিকে সহজ রাখুন।
const path = require('path');
function isFile(pathItem) {
return !!path.extname(pathItem);
}
উপরের উত্তরগুলি পরীক্ষা করে যে কোনও ফাইলসিস্টেমটিতে এমন কোনও পথ রয়েছে যা কোনও ফাইল বা ডিরেক্টরি। তবে এটি চিহ্নিত করা যায় না যে প্রদত্ত পাথটি একা কোনও ফাইল বা ডিরেক্টরি।
উত্তরটি হ'ল "/" ব্যবহার করে ডিরেক্টরি ভিত্তিক পাথ চিহ্নিত করা identify লাইক -> "/ সি / ডস / রান /"। <- পিছনের সময়কাল।
কোনও ডিরেক্টরি বা ফাইলের পথের মতো যা এখনও লেখা হয়নি। বা অন্য একটি কম্পিউটার থেকে পাথ। বা এমন একটি পথ যেখানে একই নামের ফাইল এবং ডিরেক্টরি উভয়ই বিদ্যমান।
// /tmp/
// |- dozen.path
// |- dozen.path/.
// |- eggs.txt
//
// "/tmp/dozen.path" !== "/tmp/dozen.path/"
//
// Very few fs allow this. But still. Don't trust the filesystem alone!
// Converts the non-standard "path-ends-in-slash" to the standard "path-is-identified-by current "." or previous ".." directory symbol.
function tryGetPath(pathItem) {
const isPosix = pathItem.includes("/");
if ((isPosix && pathItem.endsWith("/")) ||
(!isPosix && pathItem.endsWith("\\"))) {
pathItem = pathItem + ".";
}
return pathItem;
}
// If a path ends with a current directory identifier, it is a path! /c/dos/run/. and c:\dos\run\.
function isDirectory(pathItem) {
const isPosix = pathItem.includes("/");
if (pathItem === "." || pathItem ==- "..") {
pathItem = (isPosix ? "./" : ".\\") + pathItem;
}
return (isPosix ? pathItem.endsWith("/.") || pathItem.endsWith("/..") : pathItem.endsWith("\\.") || pathItem.endsWith("\\.."));
}
// If a path is not a directory, and it isn't empty, it must be a file
function isFile(pathItem) {
if (pathItem === "") {
return false;
}
return !isDirectory(pathItem);
}
নোড সংস্করণ: v11.10.0 - ফেব্রুয়ারী 2019
শেষ চিন্তা: এমনকি ফাইল সিস্টেমে আঘাত কেন?
এখানে আমি ব্যবহার করি একটি ফাংশন। এই পোস্টে কেউই এর ব্যবহার promisifyও await/asyncবৈশিষ্ট্য ব্যবহার করছে না তাই ভেবেছিলাম ভাগ করে নেব।
const promisify = require('util').promisify;
const lstat = promisify(require('fs').lstat);
async function isDirectory (path) {
try {
return (await lstat(path)).isDirectory();
}
catch (e) {
return false;
}
}
দ্রষ্টব্য: আমি require('fs').promises;এটি ব্যবহার করি না কারণ এটি এখন এক বছরের জন্য পরীক্ষামূলক, এটির উপর নির্ভর না করাই ভাল।