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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন