Swift (iOS/macOS) में ZIP/आर्काइव के साथ कार्य: पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Swift (iOS/macOS) में ZIP/आर्काइव के साथ कार्य

आधुनिक iOS और macOS डेवलपमेंट में, फ़ाइलों को पैक और अनपैक करने की आवश्यकता अक्सर होती है। ZIP-आर्काइव डेटा संपीड़न का मानक तरीका है, जो सभी Apple प्लेटफ़ॉर्म पर समर्थित है। इस लेख में, हम ZIP के साथ कार्य करने के लिए Swift के मूल साधनों के साथ-साथ लोकप्रिय लाइब्रेरी ZIPFoundation पर भी विचार करेंगे।



Foundation के मूल साधन

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



ZIPFoundation लाइब्रेरी

ZIPFoundation ZIP-आर्काइव के साथ कार्य करने के लिए एक हल्की लाइब्रेरी है, जो शुद्ध Swift में लिखी गई है। यह iOS, macOS, tvOS और watchOS का समर्थन करती है, इसे बाहरी निर्भरता की आवश्यकता नहीं है, और यह MIT लाइसेंस के तहत वितरित की जाती है।



Swift Package Manager के माध्यम से स्थापना

Package.swift में निर्भरता जोड़ें:

dependencies: [    .package(url: "https://github.com/weichsel/ZIPFoundation.git", from: "0.9.16")]

या Xcode के माध्यम से: File → Add Packages → रिपॉजिटरी URL दर्ज करें।



मुख्य संचालन



1. ZIP-आर्काइव बनाना

एक फ़ाइल को पैक करना:

import ZIPFoundation

let fileManager = FileManager.defaultlet sourceURL = URL(fileURLWithPath: "/path/to/file.txt")let destinationURL = URL(fileURLWithPath: "/path/to/archive.zip")

do { try fileManager.zipItem(at: sourceURL, to: destinationURL) print("आर्काइव बनाया गया: \\(destinationURL.path)")} catch { print("त्रुटि: \\(error.localizedDescription)")}


पूरी निर्देशिका को पैक करना:

let directoryURL = URL(fileURLWithPath: "/path/to/folder")let archiveURL = URL(fileURLWithPath: "/path/to/folder.zip")

do { try fileManager.zipItem(at: directoryURL, to: archiveURL) print("निर्देशिका पैक हो गई")} catch { print("त्रुटि: \\(error)")}


2. आर्काइव को अनज़िप करना

let archiveURL = URL(fileURLWithPath: "/path/to/archive.zip")let destinationURL = URL(fileURLWithPath: "/path/to/unzip")

do { try fileManager.unzipItem(at: archiveURL, to: destinationURL) print("अनज़िप पूर्ण")} catch { print("अनज़िप त्रुटि: \\(error)")}


3. निकाले बिना आर्काइव की सामग्री के साथ कार्य करना

guard let archive = Archive(url: archiveURL, accessMode: .read) else {    fatalError("आर्काइव खोलने में विफल")}

// सभी प्रविष्टियों की सूचीfor entry in archive { print("फ़ाइल: \\(entry.path), आकार: \\(entry.uncompressedSize) बाइट्स")}

// विशिष्ट फ़ाइल पढ़नाif let entry = archive["documents/report.pdf"] { var data = Data() do { _ = try archive.extract(entry, bufferSize: 4096) { partialData in data.append(partialData) } print("\\(data.count) बाइट्स निकाले गए") } catch { print("त्रुटि: \\(error)") }}


4. मौजूदा आर्काइव में फ़ाइलें जोड़ना

guard let archive = Archive(url: archiveURL, accessMode: .update) else {    fatalError("अपडेट के लिए आर्काइव खोलने में विफल")}

let newFileURL = URL(fileURLWithPath: "/path/to/new_file.txt")do { try archive.addEntry(with: "new_file.txt", relativeTo: newFileURL.deletingLastPathComponent()) print("फ़ाइल जोड़ी गई")} catch { print("त्रुटि: \\(error)")}


प्रगति और बड़ी फ़ाइलों के साथ कार्य करना

बड़े आर्काइव के लिए Progress का उपयोग करें:

let progress = Progress(totalUnitCount: 100)let archiveURL = URL(fileURLWithPath: "/path/to/large.zip")let destinationURL = URL(fileURLWithPath: "/path/to/output")

do { try FileManager.default.unzipItem(at: archiveURL, to: destinationURL, progress

अनुशंसाएँ