FileManager — bu nədir, iOS fayl sistemi ilə iş

Müəllif: IT Sectr Dərc olunub: 2026-07-09 Oxuma vaxtı: 9 dəq

FileManager — Foundation framework-dən olan, iOS, macOS və digər Apple platformalarının fayl sistemi ilə iş üçün interfeys təmin edən sinifdir. O, fayl və kataloqları yaratmağa, oxumağa, köçürməyə və silməyə, həmçinin metadata və giriş hüquqlarını idarə etməyə imkan verir. iOS-da bütün FileManager əməliyyatları tətbiqin Sandbox çərçivəsi ilə məhdudlaşdırılıb. Apple Developer Documentation (2026)-ya görə, FileManager thread-safe-dir və fon thread-lərindən istifadə oluna bilər, lakin fayl sistemi ilə bütün əməliyyatlar sandbox və Security-Scoped Bookmarks giriş hüquqları nəzərə alınmaqla yerinə yetirilməlidir.

Əsas məqamlar

  • FileManager — fayl sistemi ilə əməliyyatlar üçün əsas Foundation sinifi: faylları oxumaq, yazmaq, köçürmək, silmək.
  • Sandbox məhdudlaşdırır FileManager girişini yalnız tətbiqin kataloqlarına — Documents, Library, tmp və App Group.
  • URL-based API (fileManager.urls) müasir tətbiqlər üçün String-based (NSHomeDirectory) üzərində üstünlük təşkil edir.
  • FileManagerDelegate fayl əməliyyatlarını shouldMoveItemAt və shouldRemoveItemAt vasitəsilə izləməyə və nəzarət etməyə imkan verir.
  • iCloud Drive FileManager vasitəsilə ubiquityContainer aktiv olduqda və müvafiq entitlements ilə əlçatandır.

FileManager nədir

FileManager — Foundation framework-dən olan, bütün Apple platformalarında fayl sistemi ilə qarşılıqlı əlaqə üçün vahid API təmin edən sinqleton sinifdir. FileManager.default və ya xüsusi deleqat ilə nümunə yaratmaqla əldə edilə bilər.

Sinifin əsas imkanlarına daxildir: faylın mövcudluğunu yoxlamaq (fileExists), kataloq yaratmaq (createDirectory), kopyalamaq və köçürmək (copyItem, moveItem), silmək (removeItem), atributları əldə etmək (attributesOfItem) və kataloqların məzmununu əldə etmək (contentsOfDirectory). FileManager məlumatların seriyalaşdırılması üçün NSData, String və JSONEncoder/Decoder ilə sıx bağlıdır.

FileManager thread-safe-dir: Apple müxtəlif thread-lərdən metodların çağırılmasının təhlükəsizliyinə zəmanət verir. Bununla birlikdə, fayl sistemi əməliyyatları böyük fayllarda yavaş ola bilər, buna görə Apple onların fon növbəsində (DispatchQueue.global) yerinə yetirilməsini və gedişat barədə məlumat vermək üçün FileManagerDelegate metodlarının çağırılmasını tövsiyə edir.

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 tətbiqinin əsas kataloqları

Hər bir iOS tətbiqinin Sandbox çərçivəsində FileManager vasitəsilə əldə edilə bilən üç əsas kataloqu var: Documents, Library və tmp. Hər birinin öz təyinatı və ehtiyat nüsxə qaydaları var ki, onlara riayət etmək App Store baxışından keçmək üçün kritik əhəmiyyət daşıyır.

Documents — işə salmalar arasında saxlanılmalı və iCloud-a ehtiyatı aparılmalı olan istifadəçi məlumatları üçün. Library — tətbiq faylları üçün: keşlər (Caches), parametrlər (Preferences), məlumat bazaları (Application Support). tmp — tətbiq işə salmaları arasında sistem tərəfindən istənilən vaxt silinə bilən müvəqqəti fayllar üçün.

KataloqFileManager URLEhtiyat nüsxəİstifadə
Documents.documentDirectoryBəliİstifadəçi məlumatları, fayllar, ixrac
Library/Caches.cachesDirectoryXeyrŞəkil keşləri, müvəqqəti məlumatlar
Library/Preferences.libraryDirectory + "/Preferences"BəliUserDefaults, tətbiq parametrləri
Library/Application Support.applicationSupportDirectoryBəliMəlumat bazaları, CoreData, Realm
tmp.tmpDirectory (NSTemporaryDirectory)XeyrSeans müvəqqəti faylları

Apple qaydası: əgər faylı internetdən bərpa etmək və ya yenidən yaratmaq olarsa — o, Caches-də saxlanmalıdır (ehtiyat nüsxəsiz). Əgər fayl istifadəçi məlumatları ehtiva edirsə — Documents-də (ehtiyat nüsxə ilə). Faylların səhv yerləşdirilməsi tətbiqin rədd edilməsinin tez-tez rast gəlinən səbəblərindən biridir, çünki Apple Storage & iCloud Backup Guidelines-ə uyğunluğu yoxlayır.

Faylların oxunması və yazılması

FileManager özü faylların məzmununu oxumaq üçün metodlar təmin etmir — bunun üçün NSData(contentsOf), String(contentsOf) və ya FileHandle metodları istifadə olunur. FileManager faylların idarə edilməsinə cavabdehdir: mövcudluğu yoxlamaq, köçürmək, kopyalamaq, silmək.

Məlumatların yazılması üçün createFile(atPath:contents:attributes:) metodu və ya yüksək səviyyəli API-lər — data.write(to:), JSONEncoder.encode və PropertyListEncoder istifadə olunur. FileManager həmçinin böyük faylların axınlı oxunması və yazılması üçün bütün faylı yaddaşa yükləməyən FileHandle təmin edir.

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

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

// JSON-u Documents-ə yaz
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-u oxu
let loadedData = try Data(contentsOf: url)
let loadedSettings = try JSONDecoder()
    .decode(UserSettings.self, from: loadedData)

Yazarkən options: .atomic istifadə edin — bu, yazı nasazlığı zamanı faylın zədələnməyəcəyinə zəmanət verir: məlumatlar əvvəlcə müvəqqəti fayla yazılır, sonra atomik olaraq hədəf yola köçürülür. Böyük faylları oxumaq üçün FileHandle-i .readingMode ilə istifadə edin və yaddaş istehlakına nəzarət edərək məlumatları hissə-hissə oxuyun.

Kataloqların idarə edilməsi

FileManager kataloqların tam idarə edilməsi üçün metodlar təmin edir: createDirectory (withIntermediateDirectories vasitəsilə bütün aralıq qovluqların yaradılması), contentsOfDirectory (fayl siyahısının əldə edilməsi), enumeratorAt (rekursiv gəzinti) və subpathsOfDirectory (kataloq daxilində bütün yollar).

enumeratorAt metodu DirectoryEnumerator qaytarır ki, bu da bütün məzmunu yaddaşa yükləmədən böyük kataloqları səmərəli şəkildə gəzməyə imkan verir. O, skipDescendants vasitəsilə filtrləməni dəstəkləyir və fayl sisteminə əlavə sorğu olmadan hər bir elementin atributlarını təqdim edir.

swift
// Rekursiv kataloq gəzintisi
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")
        }
    }
}

Kataloqu silmək üçün removeItem(at:) istifadə edin. Diqqət: iOS-da kataloqun silinməsi geri qaytarılmazdır — fayllar macOS-dakı kimi zibil qutusuna düşmür. Silmədən əvvəl bu kataloqdan faylları artıq istifadə etmədiyinizə əmin olun və əməliyyatı fon thread-də yerinə yetirin, çünki çox sayda faylın silinməsi UI-ni bloklaya bilər.

FileManager və iCloud

FileManager iCloud Drive ilə URLForUbiquityContainerIdentifier metodu vasitəsilə inteqrasiya edir, bu da tətbiq üçün iCloud kataloqunun URL-ni qaytarır. İşləmək üçün layihədə iCloud capability-ni aktivləşdirmək və müvafiq entitlement əlavə etmək tələb olunur.

iCloud faylları avtomatik sinxronlaşır, lakin FileManager əl ilə idarəetmə üçün metodlar təmin edir: startDownloadingUbiquitousItem yükləməni məcburi başladır, evictUbiquitousItem yerli nüsxəni silir, urlOfItem(at:) isə iCloud faylı üçün yerli URL qaytarır. NSMetadataQuery iCloud-da faylları axtarmaq üçün istifadə olunur.

Kritik məhdudiyyət: iCloud Drive Documents kataloqundakı fayllar üçün dəstəklənmir — yalnız ubiquityContainer-dəki fayllar üçün. Documents-i iCloud vasitəsilə sinxronlaşdırmağa çalışmayın; bunun üçün kiçik həcmli məlumatlar üçün NSUbiquitousKeyValueStore və ya mürəkkəb strukturlar üçün Core Data ilə CloudKit istifadə edin.

FileManager performansı

FileManager əməliyyatları, xüsusilə yavaş flash yaddaşı olan cihazlarda bahalı ola bilər. Apple-ın əsas tövsiyələri bütün fayl əməliyyatlarının fon növbələrində yerinə yetirilməsini, fileExistsAtPath çağırışlarının sayının minimuma endirilməsini və nəticələrin keşləşdirilməsini əhatə edir.

fileExists metodu nisbətən yavaş olan stat() sistem çağırışını yerinə yetirir. Əgər faylı oxumadan əvvəl onun mövcudluğunu yoxlayırsınızsa, dərhal oxumağa çalışmaq və xətanı idarə etmək daha yaxşıdır — bu eyni stat-ı yerinə yetirir, lakin ikiqat sistem çağırışından xilas edir. Kütləvi yoxlamalar üçün resourceValues ilə enumeratorAt istifadə edin.

Böyük həcmli məlumatlarla işin optimallaşdırılması üçün:

  • Böyük faylların axınlı emalı üçün FileHandle istifadə edin
  • Tez-tez istifadə olunan kataloqlar üçün fileManager.urls nəticələrini keşləşdirin
  • Toplu əməliyyatları dənəvər növbədə yerinə yetirin, main thread-in bloklanmasından qaçın
  • Çoxlu thread-lərdən təhlükəsiz giriş üçün CoordinatedFileManager istifadə edin

Apple Instruments fayl əməliyyatlarının profilləşdirilməsi üçün File Activity şablonu təqdim edir. Onu darboğazları müəyyən etmək üçün istifadə edin — məsələn, dövrədə tez-tez fileExists çağırışları və ya main thread-də yazma əməliyyatları. Ən çox rast gəlinən performans problemləri tətbiqin bağlanması zamanı böyük faylların sinxron yazılması ilə əlaqəlidir.

Tez-tez verilən suallar

iOS-da FileManager nədir?

FileManager — Apple fayl sistemi ilə iş üçün Foundation framework sinifidir. Fayl və kataloqların yaradılması, oxunması, köçürülməsi, silinməsi üçün API təmin edir. iOS-da onun işi Sandbox tətbiq çərçivəsi ilə məhdudlaşdırılıb, Security-Scoped Bookmarks istisna olmaqla.

iOS-da FileManager vasitəsilə hansı kataloqlar əlçatandır?

Documents — iCloud-da ehtiyat nüsxəsi olan istifadəçi məlumatları. Library/Caches — ehtiyat nüsxəsiz keşlər. Library/Application Support — məlumat bazaları. tmp — müvəqqəti fayllar. App Group Container — bir qrupun tətbiqləri arasında ümumi məlumatlar üçün.

FileManager vasitəsilə Documents yolunu necə əldə etmək olar?

FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first çağırın. Metod cari tətbiqin Sandbox daxilində Documents kataloquna mütləq yol ilə URL qaytarır. Mövcudluğu yoxlamaq üçün fileExists(atPath:) istifadə edin.

FileManager vasitəsilə digər tətbiqlərin fayllarına giriş əldə etmək mümkündürmü?

Xeyr, iOS Sandbox-u digər tətbiqlərin fayl sisteminə girişi qadağan edir. İstisnalar: App Groups (bir tərtibatçının tətbiqləri üçün ümumi kataloq) və Security-Scoped Bookmarks (UIDocumentPicker və iCloud Drive vasitəsilə fayllara giriş).

FileManager vasitəsilə faylları necə təhlükəsiz yazmaq olar?

Yazarkən .atomic seçimindən istifadə edin — məlumatlar əvvəlcə müvəqqəti fayla yazılır, sonra atomik olaraq hədəf yola köçürülür. Bu, yazı nasazlığı zamanı faylın zədələnməsinin qarşısını alır. Böyük məlumatlar üçün 1-2 MB hissələrlə yazmaq üçün FileHandle istifadə edin.

Xülasə

  • FileManager — iOS-da fayl sistemi ilə bütün əməliyyatlar üçün mərkəzi Foundation sinifi: mövcudluğun yoxlanılmasından rekursiv kataloq gəzintisinə qədər.
  • Documents, Library, tmp — müxtəlif ehtiyat nüsxə və həyat dövrü qaydaları olan üç əsas tətbiq kataloqu.
  • URL-based API Sandbox və Security-Scoped Bookmarks ilə uyğunluq üçün String-based yollardan üstündür.
  • FileHandle və axınlı emal — yaddaşın daşması olmadan böyük fayllarla işləməyin yeganə yolu.
  • FileManagerDelegate should-metodları vasitəsilə köçürmə, kopyalama və silmə əməliyyatlarını idarə etməyə imkan verir.
  • iCloud inteqrasiyası bulud faylları ilə iş üçün ubiquityContainer və NSMetadataQuery vasitəsilə əlçatandır.
  • Fayl əməliyyatlarının performansı kritikdir — onları fon növbələrində yerinə yetirin və fileExists çağırışlarını minimuma endirin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun