FileManager — bu nima, iOS fayl tizimi bilan ishlash

Muallif: IT Sectr Nashr etilgan: 2026-07-09 O'qish vaqti: 9 daq

FileManager — bu Foundation frameworkidan iOS, macOS va boshqa Apple platformalarining fayl tizimi bilan ishlash uchun interfeysni ta'minlovchi sinfdir. U fayl va kataloglarni yaratish, o'qish, ko'chirish va o'chirish, shuningdek metadata va kirish huquqlarini boshqarish imkonini beradi. iOS-da barcha FileManager operatsiyalari ilova Sandbox doirasi bilan cheklangan. Apple Developer Documentation (2026) ma'lumotlariga ko'ra, FileManager thread-safe hisoblanadi va fon oqimlaridan foydalanish mumkin, ammo fayl tizimi bilan barcha operatsiyalar sandbox va Security-Scoped Bookmarks kirish huquqlarini hisobga olgan holda bajarilishi kerak.

Asosiy nuqtalar

  • FileManager — fayl tizimi bilan operatsiyalar uchun asosiy Foundation sinfi: fayllarni o'qish, yozish, ko'chirish, o'chirish.
  • Sandbox cheklaydi FileManager kirishini faqat ilova kataloglariga — Documents, Library, tmp va App Group.
  • URL-based API (fileManager.urls) zamonaviy ilovalar uchun String-based (NSHomeDirectory) dan afzal.
  • FileManagerDelegate fayl operatsiyalarini shouldMoveItemAt va shouldRemoveItemAt orqali kuzatish va nazorat qilish imkonini beradi.
  • iCloud Drive FileManager orqali ubiquityContainer yoqilgan va tegishli entitlements bilan mavjud.

FileManager nima

FileManager — bu Foundation frameworkidan barcha Apple platformalarida fayl tizimi bilan o'zaro aloqa qilish uchun yagona API ta'minlovchi singleton sinfdir. U FileManager.default yoki maxsus delegat bilan namuna yaratish orqali mavjud.

Sinfning asosiy imkoniyatlari: fayl mavjudligini tekshirish (fileExists), kataloglarni yaratish (createDirectory), nusxalash va ko'chirish (copyItem, moveItem), o'chirish (removeItem), atributlarni olish (attributesOfItem) va kataloglar tarkibini olish (contentsOfDirectory). FileManager ma'lumotlarni seriyalashtirish uchun NSData, String va JSONEncoder/Decoder bilan chambarchas bog'liq.

FileManager thread-safe hisoblanadi: Apple turli oqimlardan metodlarni chaqirish xavfsizligini kafolatlaydi. Biroq, fayl tizimi operatsiyalari katta fayllarda sekin bo'lishi mumkin, shuning uchun Apple ularni fon navbatida (DispatchQueue.global) bajarishni va taraqqiyot haqida xabar berish uchun FileManagerDelegate metodlarini chaqirishni tavsiya qiladi.

swift
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 ilovasining asosiy kataloglari

Har bir iOS ilovasi Sandbox doirasida FileManager orqali mavjud bo'lgan uchta asosiy katalog ga ega: Documents, Library va tmp. Har biri o'z maqsadiga va zaxira nusxa qoidalariga ega, ularga rioya qilish App Store ko'rib chiqishidan o'tish uchun juda muhimdir.

Documents — ishga tushirishlar orasida saqlanishi va iCloud-ga zaxira nusxasi olinishi kerak bo'lgan foydalanuvchi ma'lumotlari uchun. Library — ilova fayllari uchun: kesh (Caches), sozlamalar (Preferences), ma'lumotlar bazalari (Application Support). tmp — ilova ishga tushirishlari orasida tizim tomonidan istalgan vaqtda o'chirilishi mumkin bo'lgan vaqtinchalik fayllar uchun.

KatalogFileManager URLZaxira nusxaFoydalanish
Documents.documentDirectoryHaFoydalanuvchi ma'lumotlari, fayllar, eksport
Library/Caches.cachesDirectoryYo'qRasm keshlari, vaqtinchalik ma'lumotlar
Library/Preferences.libraryDirectory + "/Preferences"HaUserDefaults, ilova sozlamalari
Library/Application Support.applicationSupportDirectoryHaMa'lumotlar bazalari, CoreData, Realm
tmp.tmpDirectory (NSTemporaryDirectory)Yo'qSessiya vaqtinchalik fayllari

Apple qoidasi: agar faylni internetdan tiklash yoki qayta yaratish mumkin bo'lsa — u Caches da saqlanishi kerak (zaxira nusxasiz). Agar fayl foydalanuvchi ma'lumotlarini o'z ichiga olsa — Documents da (zaxira nusxasi bilan). Fayllarni noto'g'ri joylashtirish ilovani rad etishning tez-tez uchraydigan sabablaridan biridir, chunki Apple Storage & iCloud Backup Guidelines ga muvofiqligini tekshiradi.

Fayllarni o'qish va yozish

FileManager o'zi fayllar tarkibini o'qish uchun metodlarni taqdim etmaydi — buning uchun NSData(contentsOf), String(contentsOf) yoki FileHandle metodlari ishlatiladi. FileManager fayllarni boshqarish uchun javobgardir: mavjudligini tekshirish, ko'chirish, nusxalash, o'chirish.

Ma'lumotlarni yozish uchun createFile(atPath:contents:attributes:) metodi yoki yuqori darajadagi API-lar — data.write(to:), JSONEncoder.encode va PropertyListEncoder ishlatiladi. FileManager shuningdek, katta fayllarni oqimli o'qish va yozish uchun butun faylni xotiraga yuklamaydigan FileHandle ni taqdim etadi.

swift
struct UserSettings: Codable {
    let username: String
    let isDarkMode: Bool
    let fontSize: Int
}

let settings = UserSettings(
    username: "developer",
    isDarkMode: true,
    fontSize: 16
)

// JSON ni Documents ga yoz
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 ni o'qish
let loadedData = try Data(contentsOf: url)
let loadedSettings = try JSONDecoder()
    .decode(UserSettings.self, from: loadedData)

Yozishda options: .atomic dan foydalaning — bu yozishdagi nosozlikda faylning buzilmasligini kafolatlaydi: ma'lumotlar avval vaqtinchalik faylga saqlanadi, so'ngra atomik ravishda maqsadli yo'lga ko'chiriladi. Katta fayllarni o'qish uchun FileHandle ni .readingMode bilan ishlating va xotira sarfini nazorat qilib, ma'lumotlarni bo'laklab o'qing.

Kataloglarni boshqarish

FileManager kataloglarni to'liq boshqarish uchun metodlarni taqdim etadi: createDirectory (withIntermediateDirectories orqali barcha oraliq papkalarni yaratish), contentsOfDirectory (fayllar ro'yxatini olish), enumeratorAt (rekursiv aylanib chiqish) va subpathsOfDirectory (katalog ichidagi barcha yo'llar).

enumeratorAt metodi DirectoryEnumerator qaytaradi, bu butun tarkibni xotiraga yuklamasdan katta kataloglarni samarali aylanib chiqish imkonini beradi. U skipDescendants orqali filtrlashni qo'llab-quvvatlaydi va fayl tizimiga qo'shimcha so'rovsiz har bir elementning atributlarini taqdim etadi.

swift
// Rekursiv katalog aylanib chiqish
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")
        }
    }
}

Katalogni o'chirish uchun removeItem(at:) dan foydalaning. Diqqat: iOS-da katalogni o'chirish qaytarilmasdir — fayllar macOS-dagi kabi axlat qutisiga tushmaydi. O'chirishdan oldin ushbu katalogdagi fayllardan endi foydalanmayotganingizga ishonch hosil qiling va operatsiyani fon oqimida bajaring, chunki ko'p sonli fayllarni o'chirish UI ni bloklashi mumkin.

FileManager va iCloud

FileManager iCloud Drive bilan URLForUbiquityContainerIdentifier metodi orqali integratsiyalashadi, bu ilova uchun iCloud katalogining URL-ni qaytaradi. Ishlash uchun loyihada iCloud capability-ni yoqish va tegishli entitlement qo'shish talab qilinadi.

iCloud fayllari avtomatik sinxronlanadi, ammo FileManager qo'lda boshqarish uchun metodlarni taqdim etadi: startDownloadingUbiquitousItem yuklab olishni majburan boshlaydi, evictUbiquitousItem mahalliy nusxani o'chiradi, urlOfItem(at:) iCloud fayli uchun mahalliy URL qaytaradi. NSMetadataQuery iCloud-da fayllarni qidirish uchun ishlatiladi.

Muhim cheklov: iCloud Drive Documents katalogidagi fayllar uchun qo'llab-quvvatlanmaydi — faqat ubiquityContainer dagi fayllar uchun. Documents ni iCloud orqali sinxronlashtirishga urinmang; buning uchun kichik hajmdagi ma'lumotlar uchun NSUbiquitousKeyValueStore yoki murakkab tuzilmalar uchun Core Data bilan CloudKit dan foydalaning.

FileManager ishlashi

FileManager operatsiyalari, ayniqsa sekin flesh-xotiraga ega qurilmalarda, qimmat bo'lishi mumkin. Apple ning asosiy tavsiyalari barcha fayl operatsiyalarini fon navbatlarida bajarish, fileExistsAtPath chaqiruvlari sonini minimallashtirish va natijalarni keshlashni o'z ichiga oladi.

fileExists metodi nisbatan sekin bo'lgan stat() tizim chaqiruvini bajaradi. Agar faylni o'qishdan oldin uning mavjudligini tekshirayotgan bo'lsangiz, darhol o'qishga urinib, xatoni boshqarish yaxshiroqdir — bu bir xil stat-ni bajaradi, ammo ikkilangan tizim chaqiruvidan qutqaradi. Ommaviy tekshirishlar uchun resourceValues bilan enumeratorAt dan foydalaning.

Katta hajmdagi ma'lumotlar bilan ishlashni optimallashtirish uchun:

  • Katta fayllarni oqimli qayta ishlash uchun FileHandle dan foydalaning
  • Tez-tez ishlatiladigan kataloglar uchun fileManager.urls natijalarini keshlang
  • Ommaviy operatsiyalarni granulat navbatda bajaring, main thread bloklanishidan saqlaning
  • Bir nechta oqimlardan xavfsiz kirish uchun CoordinatedFileManager dan foydalaning

Apple Instruments fayl operatsiyalarini profillash uchun File Activity shablonini taqdim etadi. Uni tor joylarni aniqlash uchun foydalaning — masalan, siklda tez-tez fileExists chaqiruvlari yoki main thread da yozish operatsiyalari. Eng keng tarqalgan ishlash muammolari ilovani yig'ish paytida katta fayllarni sinxron yozish bilan bog'liq.

Ko'p beriladigan savollar

iOS-da FileManager nima?

FileManager — Apple fayl tizimi bilan ishlash uchun Foundation framework sinfi. Fayl va kataloglarni yaratish, o'qish, ko'chirish, o'chirish uchun API taqdim etadi. iOS-da uning ishi Sandbox ilova doirasi bilan cheklangan, Security-Scoped Bookmarks bundan mustasno.

iOS-da FileManager orqali qanday kataloglar mavjud?

Documents — iCloud-da zaxira nusxasi bilan foydalanuvchi ma'lumotlari. Library/Caches — zaxira nusxasiz keshlar. Library/Application Support — ma'lumotlar bazalari. tmp — vaqtinchalik fayllar. App Group Container — bir guruh ilovalari o'rtasida umumiy ma'lumotlar uchun.

FileManager orqali Documents yo'lini qanday olish mumkin?

FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first ni chaqiring. Metod joriy ilova Sandbox ichidagi Documents katalogiga mutlaq yo'l bilan URL qaytaradi. Mavjudligini tekshirish uchun fileExists(atPath:) dan foydalaning.

FileManager orqali boshqa ilovalarning fayllariga kirish mumkinmi?

Yo'q, iOS Sandbox boshqa ilovalarning fayl tizimiga kirishni taqiqlaydi. Istisnolar: App Groups (bitta dasturchining ilovalari uchun umumiy katalog) va Security-Scoped Bookmarks (UIDocumentPicker va iCloud Drive orqali fayllarga kirish).

FileManager orqali fayllarni qanday xavfsiz yozish mumkin?

Yozishda .atomic variantidan foydalaning — ma'lumotlar avval vaqtinchalik faylga saqlanadi, so'ngra atomik ravishda maqsadli yo'lga ko'chiriladi. Bu yozishdagi nosozlikda faylning buzilishini oldini oladi. Katta ma'lumotlar uchun 1-2 MB bo'laklarda yozish bilan FileHandle dan foydalaning.

Xulosa

  • FileManager — iOS-da fayl tizimi bilan barcha operatsiyalar uchun markaziy Foundation sinfi: mavjudlikni tekshirishdan rekursiv katalog aylanib chiqishgacha.
  • Documents, Library, tmp — turli zaxira nusxa va hayot sikli qoidalariga ega uchta asosiy ilova katalogi.
  • URL-based API Sandbox va Security-Scoped Bookmarks bilan moslik uchun String-based yo'llardan afzal.
  • FileHandle va oqimli qayta ishlash — xotira to'lib ketmasdan katta fayllar bilan ishlashning yagona usuli.
  • FileManagerDelegate should-metodlar orqali ko'chirish, nusxalash va o'chirish operatsiyalarini nazorat qilish imkonini beradi.
  • iCloud integratsiyasi bulutli fayllar bilan ishlash uchun ubiquityContainer va NSMetadataQuery orqali mavjud.
  • Fayl operatsiyalari ishlashi muhim — ularni fon navbatlarida bajaring va fileExists chaqiruvlarini minimallashtiring.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing