পাথ ফাইল বা ডিরেক্টরি কিনা Node.js চেক করুন



node js tutorial (4)

উপরের কোনও উত্তর যদি কোন ফাইল সিস্টেমে একটি ফাইল বা ডিরেক্টরি থাকে তবে এটি পরীক্ষা করে দেখুন। কিন্তু এটি প্রদত্ত কোনও পথ একটি ফাইল বা ডিরেক্টরি কিনা তা সনাক্ত করে না।

উত্তর "/।" ব্যবহার করে ডিরেক্টরি-ভিত্তিক পাথ সনাক্ত করা হয়। মত -> "/ সি / ডস / রান /।" <- পিছনে সময়কাল।

এমন একটি ডিরেক্টরি বা ফাইলের পথের মতো যা এখনও লেখা হয়নি। অথবা একটি ভিন্ন কম্পিউটার থেকে একটি পথ। অথবা একটি পাথ যেখানে একই নামের একটি ফাইল এবং ডিরেক্টরি বিদ্যমান।

// /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

সর্বশেষ চিন্তা: কেন ফাইল সিস্টেম এ আঘাত?

আমি এই কাজ কিভাবে ব্যাখ্যা যে কোনো অনুসন্ধান ফলাফল বলে মনে হচ্ছে না।

আমি যা করতে চাই তা হল একটি প্রদত্ত পথ একটি ফাইল বা একটি ডিরেক্টরি (ফোল্ডার) কিনা তা জানতে সক্ষম হ'ল।


fs.lstatSync(path_string).isDirectory() আপনাকে বলতে হবে। docs থেকে:

Fs.stat () এবং fs.lstat () থেকে ফিরে আসা অবজেক্টগুলি এই ধরনের।

stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isSymbolicLink() (only valid with fs.lstat())
stats.isFIFO()
stats.isSocket()

আপডেট করুন: নোড.জেএস = = 10

আমরা নতুন fs.promises API ব্যবহার করতে পারেন

পরীক্ষামূলক এই বৈশিষ্ট্যটি এখনও সক্রিয় বিকাশের অধীনে এবং ভবিষ্যতের সংস্করণে অ-পশ্চাদপসরণযোগ্য সামঞ্জস্যপূর্ণ পরিবর্তনগুলি বা এমনকি অপসারণের বিষয়বস্তুর অধীনে। বৈশিষ্ট্য ব্যবহার উত্পাদন পরিবেশে সুপারিশ করা হয় না। পরীক্ষামূলক বৈশিষ্ট্য Node.js সেমান্টিক সংস্করণ মডেল সাপেক্ষে নয়।

const fs = require('fs').promises;

(async() => {

        try {
            const stat = await fs.lstat('test.txt');
            console.log(stat.isFile());
        } catch(err) {
            console.error(err);
        }
})();

কোন নোড। জেএস সংস্করণ

এখানে পাথটি কোনও ফাইল বা ডিরেক্টরি অ্যাস্যাক্রোনাসেটে সনাক্ত করা হয়, এটি নোডের প্রস্তাবিত পদ্ধতি। 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()}`);
});

সিঙ্ক্রোনাস API ব্যবহার করার সময় নোট করুন:

সিঙ্ক্রোনাস ফর্ম ব্যবহার করার সময় কোন ব্যতিক্রম অবিলম্বে নিক্ষেপ করা হয়। আপনি ব্যতিক্রম হ্যান্ডেল করার চেষ্টা করুন বা ধরুন বা তাদের বুদ্বুদ আপ করার অনুমতি দিতে পারেন।

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
   }
}

আন্তরিকভাবে, প্রশ্ন পাঁচ বছর বিদ্যমান এবং কোন চমৎকার মুখোমুখি?

function is_dir(path) {
    try {
        var stat = fs.lstatSync(path);
        return stat.isDirectory();
    } catch (e) {
        // lstatSync throws an error if path doesn't exist
        return false;
    }
}




fs