Go (Golang) में ZIP/आर्काइव के साथ काम करना
Go (Golang) में ZIP आर्काइव के साथ काम मानक पैकेज archive/zip के माध्यम से कार्यान्वित किया जाता है। यह पैकेज ZIP आर्काइव बनाने, पढ़ने, लिखने और फ़ाइलें निकालने के लिए सभी आवश्यक उपकरण प्रदान करता है। कई अन्य भाषाओं के विपरीत, Go को बुनियादी संचालन के लिए तृतीय-पक्ष लाइब्रेरी स्थापित करने की आवश्यकता नहीं है — सब कुछ पहले से ही मानक लाइब्रेरी में मौजूद है।
पैकेज archive/zip समर्थन करता है:
- नए ZIP आर्काइव बनाना
- मौजूदा आर्काइव पढ़ना
- फ़ाइलें और निर्देशिकाएँ जोड़ना
- अलग-अलग फ़ाइलें या पूरा आर्काइव निकालना
- फ़ाइल मेटाडेटा (दिनांक, एक्सेस अधिकार) के साथ काम करना
Go में ZIP आर्काइव बनाना
आर्काइव बनाने के लिए, लिखने के लिए एक फ़ाइल खोलना और zip.Writer बनाना आवश्यक है। प्रत्येक फ़ाइल को Create या बारीक ट्यूनिंग के लिए CreateHeader के माध्यम से जोड़ा जाता है।
package main
import ( "archive/zip" "fmt" "io" "os")
func main() { // एक नई ZIP फ़ाइल बनाएँ zipFile, err := os.Create("example.zip") if err != nil { panic(err) } defer zipFile.Close()
// आर्काइव के लिए Writer बनाएँ zipWriter := zip.NewWriter(zipFile) defer zipWriter.Close()
// एक टेक्स्ट फ़ाइल जोड़ें file1, err := zipWriter.Create("hello.txt") if err != nil { panic(err) } _, err = file1.Write([]byte("Hello, Go ZIP!")) if err != nil { panic(err) }
// मौजूदा फ़ाइल से सामग्री के साथ दूसरी फ़ाइल जोड़ें sourceFile, err := os.Open("source.txt") if err != nil { panic(err) } defer sourceFile.Close()
targetFile, err := zipWriter.Create("copy_of_source.txt") if err != nil { panic(err) } _, err = io.Copy(targetFile, sourceFile) if err != nil { panic(err) }
fmt.Println("आर्काइव बनाया गया: example.zip")}ZIP आर्काइव पढ़ना
आर्काइव पढ़ने के लिए zip.OpenReader का उपयोग किया जाता है, जो ReadCloser लौटाता है। प्रत्येक फ़ाइल को zip.File संरचना द्वारा दर्शाया जाता है।
package main
import ( "archive/zip" "fmt" "io" "os")
func main() { // पढ़ने के लिए आर्काइव खोलें reader, err := zip.OpenReader("example.zip") if err != nil { panic(err) } defer reader.Close()
// आर्काइव में सभी फ़ाइलों को पुनरावृत्त करें for _, file := range reader.File { fmt.Printf("फ़ाइल: %s", file.Name) fmt.Printf("आकार: %d बाइट", file.UncompressedSize64) fmt.Printf("संपीड़ित आकार: %d बाइट", file.CompressedSize64) fmt.Printf("संशोधन दिनांक: %s", file.Modified.Format("2006-01-02 15:04:05")) fmt.Println("---")
// आर्काइव से फ़ाइल खोलें rc, err := file.Open() if err != nil { panic(err) } defer rc.Close()
// सामग्री पढ़ें (यदि छोटी फ़ाइल है) content, err := io.ReadAll(rc) if err != nil { panic(err) } fmt.Printf("सामग्री: %s
", string(content)) }}आर्काइव से फ़ाइलें निकालना
किसी निर्देशिका में आर्काइव को पूरी तरह से अनज़िप करने के लिए, लक्ष्य फ़ोल्डर बनाना और प्रत्येक फ़ाइल की सामग्री लिखना आवश्यक है।
package main
import ( "archive/zip" "fmt" "io" "os" "path/filepath")
func extractZip(src, dest string) error { reader, err := zip.OpenReader(src) if err != nil { return err } defer reader.Close()
for _, file := range reader.File { // सुरक्षित फ़ाइल नाम (पथ ट्रैवर्सल को रोकना) filePath := filepath.Join(dest, file.Name) // लक्ष्य निर्देशिका से बाहर जाने की जाँच if !strings.HasPrefix(filepath.Clean(filePath),