कैसे जांचें कि क्या कोई फ़ाइल या निर्देशिका मौजूद है?


131

मैं ./conf/app.iniअपने Go कोड में फ़ाइल के अस्तित्व की जांच करना चाहता हूं, लेकिन मुझे ऐसा करने का एक अच्छा तरीका नहीं मिल रहा है।

मुझे पता है कि जावा में फ़ाइल की एक विधि है: 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
यह मेरे लिए 'अपवाद प्रोग्रामिंग' जैसा दिखता है। क्या कोई संसाधन है जो इस तरह के कोड को आधिकारिक #golang प्रतिमान के रूप में सही ठहराता है?
ओलिवियर एंबेल्ट

21
@OlivierAmblet यहां कोई अपवाद नहीं है। panicऑब्जेक्ट की तरह वास्तविक "अपवाद" के लिए उपयोग करें । आप कॉल के साथ "पकड़" सकते हैं recover। स्पष्ट errरूप से दूसरे रिटर्न मान के रूप में लौटना एक अत्यंत सामान्य, मुहावरेदार गो तकनीक है। देखें: golang.org/doc/effective_go.html#errors
क्रिस Pfohl

13
समाधान बहुत
रूकावट

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
@SergeyKoulikov एक अनुमति की तरह अन्य त्रुटियाँ हो सकती हैं।
डेनिस सेगुरेट

22

एक FYI करें, जब से मैंने कुछ मिनटों के लिए चारों ओर देखा कि मेरा सवाल एक त्वरित खोज है।

पथ में मौजूदा निर्देशिका का प्रतिनिधित्व करता है तो कैसे जांचें?

मेरे खोज परिणामों में यह सबसे लोकप्रिय जवाब था, लेकिन यहां और कहीं और समाधान केवल अस्तित्व की जांच प्रदान करते हैं। यह देखने के लिए कि क्या 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
    }
}

यह Denys Séguret द्वारा उत्तर का एक डुप्लिकेट है।
स्टारडस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.