FileManager Foundation फ्रेमवर्क का एक क्लास है जो iOS, macOS और अन्य Apple प्लेटफार्मों पर फ़ाइल सिस्टम के साथ काम करने के लिए इंटरफ़ेस प्रदान करता है। यह फ़ाइलों और निर्देशिकाओं को बनाने, पढ़ने, स्थानांतरित करने और हटाने के साथ-साथ मेटाडेटा और एक्सेस अनुमतियों को प्रबंधित करने की अनुमति देता है। iOS में, सभी FileManager ऑपरेशन ऐप Sandbox द्वारा सीमित हैं। Apple डेवलपर दस्तावेज़ीकरण (2026) के अनुसार, FileManager थ्रेड-सेफ है और इसे बैकग्राउंड थ्रेड्स से उपयोग किया जा सकता है, लेकिन सभी फ़ाइल सिस्टम ऑपरेशन सैंडबॉक्स और Security-Scoped Bookmarks एक्सेस अनुमतियों को ध्यान में रखते हुए किए जाने चाहिए।
मुख्य बातें
FileManager Foundation फ्रेमवर्क का एक सिंगलटन क्लास है जो सभी Apple प्लेटफार्मों पर फ़ाइल सिस्टम के साथ इंटरैक्ट करने के लिए एकीकृत API प्रदान करता है। यह FileManager.default के माध्यम से या कस्टम डेलिगेट के साथ इंस्टेंस बनाकर उपलब्ध है।
क्लास की मुख्य क्षमताओं में शामिल हैं: फ़ाइल अस्तित्व की जाँच (fileExists), निर्देशिकाएँ बनाना (createDirectory), कॉपी और स्थानांतरण (copyItem, moveItem), हटाना (removeItem), विशेषताएँ प्राप्त करना (attributesOfItem) और निर्देशिका सामग्री (contentsOfDirectory)। FileManager डेटा सीरियलाइज़ेशन के लिए NSData, String और JSONEncoder/Decoder से निकटता से संबंधित है।
FileManager थ्रेड-सेफ है: Apple विभिन्न थ्रेड्स से सुरक्षित मेथड कॉल की गारंटी देता है। हालांकि, फ़ाइल सिस्टम ऑपरेशन बड़ी फ़ाइलों पर धीमे हो सकते हैं, इसलिए Apple उन्हें बैकग्राउंड क्यू (DispatchQueue.global) पर करने और प्रगति की रिपोर्ट करने के लिए FileManagerDelegate मेथड्स को कॉल करने की सलाह देता है।
let fileManager = FileManager.default
let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first!
let fileURL = documentsURL.appendingPathComponent("data.plist")
if fileManager.fileExists(atPath: fileURL.path) {
print("File exists at \(fileURL.path)")
}
प्रत्येक iOS ऐप में तीन मुख्य निर्देशिकाएँ हैं जो Sandbox के भीतर FileManager के माध्यम से सुलभ हैं: Documents, Library और tmp। प्रत्येक का अपना उद्देश्य और बैकअप नियम हैं जो App Store समीक्षा पास करने के लिए पालन करना महत्वपूर्ण है।
Documents — उपयोगकर्ता डेटा के लिए जो लॉन्च के बीच बना रहना चाहिए और iCloud में बैकअप होना चाहिए। Library — ऐप फ़ाइलों के लिए: कैश (Caches), सेटिंग्स (Preferences), डेटाबेस (Application Support)। tmp — अस्थायी फ़ाइलों के लिए जो सिस्टम द्वारा ऐप लॉन्च के बीच किसी भी समय हटाई जा सकती हैं।
| निर्देशिका | FileManager URL | बैकअप | उपयोग |
|---|---|---|---|
| Documents | .documentDirectory | हाँ | उपयोगकर्ता डेटा, फ़ाइलें, निर्यात |
| Library/Caches | .cachesDirectory | नहीं | इमेज कैश, अस्थायी डेटा |
| Library/Preferences | .libraryDirectory + "Preferences" | हाँ | UserDefaults, ऐप सेटिंग्स |
| Library/Application Support | .applicationSupportDirectory | हाँ | डेटाबेस, CoreData, Realm |
| tmp | .tmpDirectory (NSTemporaryDirectory) | नहीं | अस्थायी सत्र फ़ाइलें |
Apple का नियम: यदि फ़ाइल को इंटरनेट से पुनर्प्राप्त किया जा सकता है या पुनः बनाया जा सकता है — इसे Caches में संग्रहीत किया जाना चाहिए (बिना बैकअप)। यदि फ़ाइल में उपयोगकर्ता डेटा है — Documents (बैकअप के साथ)। गलत फ़ाइल प्लेसमेंट ऐप अस्वीकृति के सामान्य कारणों में से एक है, क्योंकि Apple Storage और iCloud Backup Guidelines के अनुपालन की जाँच करता है।
FileManager स्वयं फ़ाइल सामग्री पढ़ने के तरीके प्रदान नहीं करता है — इसके लिए NSData(contentsOf), String(contentsOf) या FileHandle मेथड्स का उपयोग करें। FileManager फ़ाइलों के प्रबंधन के लिए जिम्मेदार है: अस्तित्व की जाँच, स्थानांतरण, कॉपी, हटाना।
डेटा लिखने के लिए createFile(atPath:contents:attributes:) मेथड या उच्च-स्तरीय API — data.write(to:), JSONEncoder.encode और PropertyListEncoder का उपयोग करें। FileManager बड़ी फ़ाइलों के स्ट्रीमिंग पढ़ने और लिखने के लिए FileHandle भी प्रदान करता है, जो पूरी फ़ाइल को मेमोरी में लोड नहीं करता है।
struct UserSettings: Codable {
let username: String
let isDarkMode: Bool
let fontSize: Int
}
let settings = UserSettings(
username: "developer",
isDarkMode: true,
fontSize: 16
)
// Documents में JSON लिखें
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(settings)
let url = documentsURL.appendingPathComponent("settings.json")
try data.write(to: url, options: .atomic)
// JSON पढ़ें
let loadedData = try Data(contentsOf: url)
let loadedSettings = try JSONDecoder()
.decode(UserSettings.self, from: loadedData)
लिखते समय, options: .atomic का उपयोग करें — यह सुनिश्चित करता है कि यदि लेखन विफल होता है तो फ़ाइल दूषित नहीं होगी: डेटा पहले एक अस्थायी फ़ाइल में सहेजा जाता है, फिर परमाणु रूप से लक्ष्य पथ पर स्थानांतरित किया जाता है। बड़ी फ़ाइलों को पढ़ने के लिए, .readingMode के साथ FileHandle का उपयोग करें और मेमोरी खपत को नियंत्रित करते हुए डेटा को भागों में पढ़ें।
FileManager पूर्ण निर्देशिका प्रबंधन के लिए मेथड प्रदान करता है: createDirectory (withIntermediateDirectories के माध्यम से सभी मध्यवर्ती फ़ोल्डर बनाना), contentsOfDirectory (फ़ाइल सूची प्राप्त करना), enumeratorAt (पुनरावर्ती ट्रैवर्सल) और subpathsOfDirectory (निर्देशिका के भीतर सभी पथ)।
enumeratorAt मेथड एक DirectoryEnumerator लौटाता है, जो सभी सामग्री को मेमोरी में लोड किए बिना बड़ी निर्देशिकाओं को कुशलतापूर्वक ट्रैवर्स करने की अनुमति देता है। यह skipDescendants के माध्यम से फ़िल्टरिंग का समर्थन करता है और अतिरिक्त फ़ाइल सिस्टम क्वेरी के बिना प्रत्येक आइटम की विशेषताएँ प्रदान करता है।
// पुनरावर्ती निर्देशिका ट्रैवर्सल
if let enumerator = fileManager.enumerator(
at: documentsURL,
includingPropertiesForKeys: [.fileSizeKey, .isDirectoryKey]
) {
for case let fileURL as URL in enumerator {
let attrs = try fileURL.resourceValues(
for: [.fileSizeKey, .isDirectoryKey]
)
if attrs.isDirectory == false {
let size = attrs.fileSize ?? 0
print("File: \(fileURL.lastPathComponent), Size: \(size) bytes")
}
}
}
निर्देशिका हटाने के लिए removeItem(at:) का उपयोग करें। चेतावनी: iOS में निर्देशिका हटाना अपरिवर्तनीय है — फ़ाइलें macOS की तरह ट्रैश में नहीं जाती हैं। हटाने से पहले, सुनिश्चित करें कि आपको उस निर्देशिका की फ़ाइलों की आवश्यकता नहीं है, और ऑपरेशन को बैकग्राउंड थ्रेड पर करें, क्योंकि कई फ़ाइलों को हटाने से UI ब्लॉक हो सकता है।
FileManager URLForUbiquityContainerIdentifier मेथड के माध्यम से iCloud Drive के साथ एकीकृत होता है, जो ऐप के लिए iCloud निर्देशिका का URL लौटाता है। इसके लिए प्रोजेक्ट में iCloud क्षमता सक्षम करना और उपयुक्त entitlement जोड़ना आवश्यक है।
iCloud फ़ाइलें स्वचालित रूप से सिंक होती हैं, लेकिन FileManager मैन्युअल नियंत्रण के लिए मेथड प्रदान करता है: startDownloadingUbiquitousItem डाउनलोड को बाध्य करता है, evictUbiquitousItem स्थानीय कॉपी हटाता है, और urlOfItem(at:) iCloud फ़ाइल के लिए स्थानीय URL लौटाता है। NSMetadataQuery का उपयोग iCloud में फ़ाइलों की खोज के लिए किया जाता है।
महत्वपूर्ण सीमा: iCloud Drive Documents निर्देशिका में फ़ाइलों के लिए समर्थित नहीं है — केवल ubiquityContainer में फ़ाइलों के लिए। Documents को iCloud के माध्यम से सिंक करने का प्रयास न करें; इसके लिए छोटे डेटा के लिए NSUbiquitousKeyValueStore या जटिल संरचनाओं के लिए Core Data with CloudKit का उपयोग करें।
FileManager ऑपरेशन महंगे हो सकते हैं, विशेष रूप से धीमी फ्लैश मेमोरी वाले उपकरणों पर। Apple की मुख्य सिफारिशों में सभी फ़ाइल ऑपरेशनों को बैकग्राउंड क्यू पर करना, fileExistsAtPath कॉल की संख्या कम करना और परिणामों को कैश करना शामिल है।
fileExists मेथड एक stat() सिस्टम कॉल करता है, जो अपेक्षाकृत धीमा है। यदि आप फ़ाइल पढ़ने से पहले उसके अस्तित्व की जाँच करते हैं, तो बेहतर है कि सीधे उसे पढ़ने का प्रयास करें और त्रुटि को संभालें — यह वही stat करता है लेकिन दोहरे सिस्टम कॉल से बचाता है। बल्क जाँच के लिए, resourceValues के साथ enumeratorAt का उपयोग करें।
बड़े डेटा वॉल्यूम के साथ काम को अनुकूलित करने के लिए:
Apple Instruments फ़ाइल ऑपरेशनों की प्रोफाइलिंग के लिए File Activity टेम्पलेट प्रदान करता है। बाधाओं की पहचान करने के लिए इसका उपयोग करें — उदाहरण के लिए, लूप में बार-बार fileExists कॉल या मुख्य थ्रेड पर लेखन ऑपरेशन। सबसे सामान्य प्रदर्शन समस्याएं ऐप के निलंबित होने पर बड़ी फ़ाइलों के सिंक्रोनस लेखन से संबंधित हैं।
अक्सर पूछे जाने वाले प्रश्न
FileManager Apple फ़ाइल सिस्टम के साथ काम करने के लिए Foundation फ्रेमवर्क का एक क्लास है। यह फ़ाइलों और निर्देशिकाओं को बनाने, पढ़ने, स्थानांतरित करने और हटाने के लिए API प्रदान करता है। iOS में, इसका संचालन Security-Scoped Bookmarks को छोड़कर, ऐप Sandbox तक सीमित है।
Documents — iCloud बैकअप के साथ उपयोगकर्ता डेटा। Library/Caches — बिना बैकअप के कैश। Library/Application Support — डेटाबेस। tmp — अस्थायी फ़ाइलें। App Group Container — एक ही समूह के ऐप्स के बीच साझा डेटा के लिए।
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first को कॉल करें। मेथड वर्तमान ऐप के Sandbox के अंदर Documents निर्देशिका के पूर्ण पथ के साथ URL लौटाता है। अस्तित्व की जाँच के लिए fileExists(atPath:) का उपयोग करें।
नहीं, iOS Sandbox अन्य ऐप्लिकेशन की फ़ाइल सिस्टम तक पहुँच को रोकता है। अपवाद: App Groups (एक ही डेवलपर के ऐप्स के लिए साझा निर्देशिका) और Security-Scoped Bookmarks (UIDocumentPicker और iCloud Drive के माध्यम से फ़ाइल पहुँच)।
लिखते समय .atomic विकल्प का उपयोग करें — डेटा पहले एक अस्थायी फ़ाइल में सहेजा जाता है, फिर परमाणु रूप से लक्ष्य पथ पर स्थानांतरित किया जाता है। यह लेखन विफलता पर फ़ाइल भ्रष्टाचार को रोकता है। बड़े डेटा के लिए, 1-2 MB के खंडों में लेखन के साथ FileHandle का उपयोग करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें