"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > 'ज़िप' पैकेज के साथ गो में फ़ाइलों को आसानी से कैसे अनज़िप करें?

'ज़िप' पैकेज के साथ गो में फ़ाइलों को आसानी से कैसे अनज़िप करें?

2024-11-17 को प्रकाशित
ब्राउज़ करें:609

How to Easily Unzip Files in Go with the `zip` Package?

गो के साथ अनज़िप करना हुआ आसान

गो में फ़ाइलों को अनज़िप करना ज़िप पैकेज के साथ बहुत आसान है। इसकी सरलता आपको इस तरह एक उपयोगिता फ़ंक्शन बनाने की अनुमति देती है:

func Unzip(src, dest string) error {
    r, err := zip.OpenReader(src)
    if err != nil {
        return err
    }
    defer func() {
        if err := r.Close(); err != nil {
            panic(err)
        }
    }()

    os.MkdirAll(dest, 0755)

    // Closure isolates file descriptor .Close() calls
    extractAndWriteFile := func(f *zip.File) error {
        rc, err := f.Open()
        if err != nil {
            return err
        }
        defer func() {
            if err := rc.Close(); err != nil {
                panic(err)
            }
        }()

        path := filepath.Join(dest, f.Name)

        // Prevent ZipSlip vulnerability
        if !strings.HasPrefix(path, filepath.Clean(dest) string(os.PathSeparator)) {
            return fmt.Errorf("illegal file path: %s", path)
        }

        if f.FileInfo().IsDir() {
            os.MkdirAll(path, f.Mode())
        } else {
            os.MkdirAll(filepath.Dir(path), f.Mode())
            f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
            if err != nil {
                return err
            }
            defer func() {
                if err := f.Close(); err != nil {
                    panic(err)
                }
            }()

            _, err = io.Copy(f, rc)
            if err != nil {
                return err
            }
        }
        return nil
    }

    for _, f := range r.File {
        err := extractAndWriteFile(f)
        if err != nil {
            return err
        }
    }

    return nil
}

यह कोड ज़िप संग्रह में प्रत्येक फ़ाइल पर सावधानीपूर्वक पुनरावृत्ति करता है, फ़ाइलपथ वैधता सुनिश्चित करते हुए निर्देशिकाओं और नियमित फ़ाइलों को उचित रूप से संभालता है। ध्यान दें कि क्लोजर दृष्टिकोण अनावश्यक विलंबित स्टैकिंग को समाप्त करता है, एनकैप्सुलेशन को बढ़ाता है, और त्रुटि प्रबंधन को सुव्यवस्थित करता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3