কোনও ফাইল বা ডিরেক্টরি বিদ্যমান কিনা তা কীভাবে পরীক্ষা করবেন?


131

আমি ./conf/app.iniআমার গো কোডে ফাইলটির অস্তিত্ব পরীক্ষা করতে চাই , তবে আমি এটি করার জন্য ভাল উপায় খুঁজে পাচ্ছি না।

আমি জানি জাভাতে ফাইলের একটি পদ্ধতি আছে: public boolean exists()যা ফাইল বা ডিরেক্টরি উপস্থিত থাকলে সত্য ফিরে আসে।

তবে কীভাবে এটি গোতে করা যায়?


7
এছাড়াও নোট করুন যে আপনি কীভাবে এই তথ্য ব্যবহার করতে যাচ্ছেন তার উপর নির্ভর করে আপনার একটি রেসের শর্ত রয়েছে। আপনি কেবল এতটুকুই বলতে পারেন যে ফাইলটি কিছুদিন আগে / অস্তিত্বহীন ছিল; আপনি পরীক্ষায় অভিনয় করার সময়টির বিপরীতে সত্য হতে পারে। সাধারণত আপনি যে কাজটি করতে চান তা পরিচালনা করার সময় এটি পরীক্ষা করা আরও ভাল (উদাহরণস্বরূপ কোনও বিদ্যমান ফাইল খোলার আগে বা কোনও নতুন ফাইল তৈরি করার আগে চেক করবেন না তবে করুন f, err := os.Open(name)বা f, err := os.OpenFile(name,os.O_CREATE|os.O_EXCL, mode)তারপরে চেক করুন os.IsNotExist(err))।
ডেভ সি

উত্তর:


189
// exists returns whether the given file or directory exists
func exists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil { return true, nil }
    if os.IsNotExist(err) { return false, nil }
    return false, err
}

ত্রুটি পরিচালনা পরিচালনা করতে সম্পাদিত।


4
এটি আমার কাছে 'ব্যতিক্রম প্রোগ্রামিং'র মতো দেখাচ্ছে। এমন কোনও সংস্থান আছে যা এই ধরণের কোডকে অফিসিয়াল # লিঙ্গাল দৃষ্টান্ত হিসাবে ন্যায়সঙ্গত করে?
অলিভিয়ার এমবল্ট

21
@ অলিভিয়ারআম্বলেট এখানে ব্যতিক্রম ঘটে না। panicঅবজেক্টের মতো প্রকৃত "ব্যতিক্রম" এর জন্য গো ব্যবহার করে । আপনি কল করতে "ধরতে" পারেন recover। স্পষ্টরূপে errদ্বিতীয় রিটার্ন মান হিসাবে ফিরিয়ে দেওয়া একটি অত্যন্ত সাধারণ, প্রতিচ্ছবিযুক্ত কৌশল। দেখুন: golang.org/doc/effective_go.html#erferences
ক্রিস

13
সমাধান খুব সংকীর্ণ নয়, যান বিশেষ
zhaozhi

1
এটি সত্য যে কোনও বুলিয়ান অস্তিত্বের ফাংশন নেই, তবে আপনি যদি কেবলমাত্র কোনও ফাইলের অস্তিত্ব পরীক্ষা করতে চান তবে অ্যাপ্লিকেশন কোডটি সহজ হতে পারে:if _, err := os.Stat("./conf/app.ini"); err == nil { /*exists*/ } else { /*not exists or some other error*/ }
টোবিয়া

11
এই ভাষার সবকিছু এত জটিল কেন?
শীর্ষ বিড়াল

123

আপনি এটি ব্যবহার করতে পারেন:

if _, err := os.Stat("./conf/app.ini"); err != nil {
    if os.IsNotExist(err) {
        // file does not exist
    } else {
        // other error
    }
}

দেখুন: http://golang.org/pkg/os/#IsNotExist


6
এটি গৃহীত উত্তরের চেয়ে ভাল তবে অন্য ধারাটি কি সত্যিই প্রয়োজনীয়?
সের্গেই কৌলিকভ

9
@ সের্গেকৌলিকভের অনুমতি ছাড়াও অন্যান্য ত্রুটি থাকতে পারে।
অস্বীকার করেন সাগুরেট

22

একটি এফওয়াইআই এর আরও অনেক কিছু, যেহেতু আমি আমার প্রশ্নটি খুব দ্রুত সন্ধানের জন্য ভেবে কয়েক মিনিট ঘুরে দেখলাম।

কীভাবে পায়ে কোনও বিদ্যমান ডিরেক্টরি উপস্থাপন করে তা পরীক্ষা করে দেখুন?

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

path := GetSomePath();
if stat, err := os.Stat(path); err == nil && stat.IsDir() {
    // path is a directory
}

আমার সমস্যার অংশটি হ'ল আমি আশা করেছি path/filepathপ্যাকেজটি আইসডির () ফাংশনটি ধারণ করবে।


13

ফাইল বিদ্যমান আছে কি নেই তা যাচাই করার সহজ উপায়:

if _, err := os.Stat("/path/to/whatever"); os.IsNotExist(err) {
    // path/to/whatever does not exist
}

if _, err := os.Stat("/path/to/whatever"); err == nil {
    // path/to/whatever exists
}

সূত্র:


-2

আপনার ফাইল বিদ্যমান কিনা তা যাচাই করার সহজ উপায় রয়েছে:

if _, err := os.Stat("./conf/app.ini"); err != nil {
    if os.IsNotExist(err) {
        ..... //Shows error if file not exists
    } else {
       ..... // Shows success message like file is there
    }
}

এটি ডেনিস সাগুরেটের উত্তরের একটি সদৃশ।
স্টারডাস্টগোগেটা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.