নোডেজগুলি পরম পথ থেকে ফাইলের নাম পাবে?


289

যদি কোনও এপিআই কোনও পরম ফাইল পথ থেকে ফাইলের নাম পুনরুদ্ধার করতে পারে?

যেমন "foo.txt"থেকে"/var/www/foo.txt"

আমি জানি এটি স্ট্রিং অপারেশনে কাজ করে, যেমন fullpath.replace(/.+\//, '') তবে তবে আমি আরও জানতে চাই যে আরও একটি 'ফর্মাল' উপায় file.getName()জাভা এর মতো এটিও করতে পারে।

নোডজেএস নিখুঁত পথ থেকে ফাইলের নাম পাবেন?

উত্তর:


542

মডিউলটির basenameপদ্ধতিটি ব্যবহার করুন path:

path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'

এখানে উপরোক্ত উদাহরণ থেকে নেওয়া ডকুমেন্টেশন এখানে রয়েছে।


108
আপনি যদি এই এক্সটেনশানটিও সরাতে চান:path.basename(fpath, path.extname(fpath))
ওয়েলন ফ্লিন

33

ফাইল নামের ফাইলের নাম অংশটি পেতে, বেসনাম পদ্ধতিটি ব্যবহার করা হয়:

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var file = path.basename(fileName);

console.log(file); // 'python.exe'

আপনি যদি এক্সটেনশন ছাড়াই ফাইলের নাম চান তবে আপনি এক্সটেনশন ভেরিয়েবলটি (এক্সটেনশনের নাম সম্বলিত) বেস নাম পদ্ধতিতে নোডকে এক্সটেনশন ছাড়াই কেবল নাম ফিরিয়ে দিতে বলবেন:

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var extension = path.extname(fileName);
var file = path.basename(fileName,extension);

console.log(file); // 'python'


4

যদি আপনি ইতিমধ্যে জানেন যে পাথ বিভাজক /(যেমন আপনি একটি নির্দিষ্ট প্ল্যাটফর্ম / পরিবেশের জন্য লিখছেন), যেমন আপনার প্রশ্নের উদাহরণ দ্বারা সূচিত হয়েছে, আপনি এটিকে সহজ রাখতে পারবেন এবং স্ট্রিংকে বিভাজক দ্বারা বিভক্ত করতে পারেন:

'/foo/bar/baz/asdf/quux.html'.split('/').pop()

এটি নিয়মিত অভিব্যক্তি দ্বারা প্রতিস্থাপনের চেয়ে দ্রুত (এবং ক্লিনার ইমো) হবে।

আবার: কেবলমাত্র এটি করুন যদি আপনি কোনও নির্দিষ্ট পরিবেশের জন্য লিখছেন, অন্যথায় pathমডিউলটি ব্যবহার করুন , কারণ পথগুলি আশ্চর্যজনকভাবে জটিল। উইন্ডোজ, উদাহরণস্বরূপ, সমর্থন /অনেক ক্ষেত্রে কিন্তু না যেমন জন্য \\?\?শৈলী শেয়ার করা নেটওয়ার্ক ফোল্ডার ও মত জন্য ব্যবহৃত উপসর্গ। উইন্ডোজে উপরোক্ত পদ্ধতিটি শীঘ্রই বা পরে ব্যর্থ হতে পারে।


1
উইন্ডোজ ফোল্ডারের বিভাজক হিসেবে \ আছে
OwnageIsMagic

1
@ ওউনেজআইজামিক হ্যাঁ, তাইই আমি লিখছি "যদি আপনি ইতিমধ্যে জানতেন যে পথটি বিভাজক /" ... :)
লিও

1
আপনি এই বিবৃতি দিয়ে কী বোঝাতে চেয়েছিলেন তা পরিষ্কার নয়। এটি প্ল্যাটফর্ম নির্ভর কোড তৈরি করে যা অন্য প্ল্যাটফর্মগুলিতে নিঃশব্দে ব্যর্থ হবে
OwnageIsMagic

@ ওনয়েজআইজামিক হ্যাঁ, এটি আসলেই হয়। আপনি যদি কোনও নির্দিষ্ট প্ল্যাটফর্মের জন্য না লিখছেন তবে সর্বদা পথের মডিউলটির পদ্ধতিগুলি ব্যবহার করুন।
লিও

উইন্ডোজ প্রকৃতপক্ষে উভয় / এবং folder ফোল্ডার পৃথক হিসাবে গ্রহণ করে এবং আপনি এটি
মেশাতেও

3
var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.parse(filepath).name;

যদি আপনাকে এক্সটেনশন ব্যবহারের সাথে নামটির প্রয়োজন হয় তবে আপনাকে এক্সটেনশন ছাড়াই ফাইলটির নাম দেয়

var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.basename(filepath);

0

নোডজেএস-এ, __filename.split (/ \ | //)। পপ () কোনও ওএস প্ল্যাটফর্মের পরম ফাইল পাথ থেকে কেবল ফাইলের নাম ফেরত দেয়। কোনও এপিআই মনে রাখার / আমদানি করার বিষয়ে কেন আমাদের যত্ন নেওয়া দরকার যখন এই রেইজেক্স পদ্ধতির মাধ্যমে আমাদের রেগেক্স দক্ষতাও আবার স্মরণ করা যায়।


1
দয়া করে আপনার উত্তরটি বিস্তারিতভাবে বর্ণনা করুন।
স্বচ্ছতার জন্য জেজে এবং মনিকা

0

সুতরাং নোডেজ সেই ডিফল্ট গ্লোবাল ভেরিয়েবলের সাথে আসে যার নাম '__fileName'বর্তমান ফাইলটি কার্যকর করা হয় My আমার পরামর্শটি __fileName কোনও ফাইল থেকে কোনও পরিষেবাতে প্রেরণ করা, যাতে ফাইলের নাম পুনরুদ্ধারটি গতিশীল হয় advice

নীচে, আমি ফাইলনাম স্ট্রিংটি ব্যবহার করি এবং তারপরে এটির উপর ভিত্তি করে বিভক্ত করি path.sep। নোট পাথ.সেসপ পিক্সিক্স ফাইল সেপারেটর এবং উইন্ডোজ ফাইল সেপারেটরগুলি ('/' এবং '\' এর সাথে সমস্যাগুলি) নিয়ে সমস্যাগুলি এড়ায়। এটা অনেক পরিষ্কার। সাবস্ট্রিংটি পাওয়া এবং কেবল সর্বশেষ বিচ্ছিন্ন নাম পাওয়া এবং এ্যাক্টুলাল দৈর্ঘ্যের সাথে 3 দ্বারা বিয়োগ করা নিজেই কথা বলে।

আপনি এই জাতীয় একটি পরিষেবা লিখতে পারেন (নোট এটি টাইপ স্ক্রিপ্টে রয়েছে তবে আপনি খুব ভাল করে এটি জেএসে লিখতে পারেন)

export class AppLoggingConstants {

    constructor(){

    }
      // Here make sure the fileName param is actually '__fileName'
    getDefaultMedata(fileName: string, methodName: string) {
        const appName = APP_NAME;
        const actualFileName = fileName.substring(fileName.lastIndexOf(path.sep)+1, fileName.length - 3);
        //const actualFileName = fileName;
     return appName+ ' -- '+actualFileName;
    }


}

export const AppLoggingConstantsInstance = new AppLoggingConstants();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.