FileManager — mi ez, munka az iOS fájlrendszerrel

Szerző: IT Sectr Megjelenés: 2026-07-09 Olvasási idő: 9 perc

FileManager — egy osztály a Foundation keretrendszerből, amely interfészt biztosít az iOS, macOS és más Apple platformok fájlrendszerével való munkához. Lehetővé teszi fájlok és könyvtárak létrehozását, olvasását, áthelyezését és törlését, valamint a metaadatok és hozzáférési jogosultságok kezelését. iOS-ben az összes FileManager művelet az alkalmazás Sandbox-ának kereteire korlátozódik. A Apple Developer Documentation (2026) szerint a FileManager thread-safe és használható háttérszálakból, de a fájlrendszerrel végzett összes műveletet a sandbox és a Security-Scoped Bookmarks hozzáférési jogosultságok figyelembevételével kell végrehajtani.

Főbb pontok

  • FileManager — a Foundation fő osztálya fájlrendszer-műveletekhez: fájlok olvasása, írása, áthelyezése, törlése.
  • A Sandbox korlátozza a FileManager hozzáférését csak az alkalmazás könyvtáraira — Documents, Library, tmp és App Group.
  • URL-alapú API (fileManager.urls) előnyösebb a String-alapúval (NSHomeDirectory) szemben a modern alkalmazásokhoz.
  • FileManagerDelegate lehetővé teszi a fájlműveletek nyomon követését és ellenőrzését a shouldMoveItemAt és shouldRemoveItemAt segítségével.
  • iCloud Drive elérhető a FileManager-en keresztül, ha az ubiquityContainer be van kapcsolva és a megfelelő entitlements rendelkezésre áll.

Mi az a FileManager

FileManager — egy singleton osztály a Foundation keretrendszerből, amely egységes API-t biztosít a fájlrendszerrel való interakcióhoz az összes Apple platformon. Elérhető a FileManager.default vagy egy egyéni delegáltal létrehozott példányon keresztül.

Az osztály fő képességei közé tartozik: fájl létezésének ellenőrzése (fileExists), könyvtárak létrehozása (createDirectory), másolás és áthelyezés (copyItem, moveItem), törlés (removeItem), attribútumok lekérése (attributesOfItem) és könyvtártartalom lekérése (contentsOfDirectory). A FileManager szorosan kapcsolódik az NSData, String és JSONEncoder/Decoder osztályokhoz az adatok szerializálásához.

A FileManager thread-safe: az Apple garantálja a metódusok különböző szálakból történő hívásának biztonságát. Azonban a fájlrendszer-műveletek lassúak lehetnek nagy fájlok esetén, ezért az Apple azt javasolja, hogy háttérsorban (DispatchQueue.global) hajtsa végre őket, és hívja meg a FileManagerDelegate metódusokat a folyamat állapotáról való tájékoztatáshoz.

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)")
}

Az iOS alkalmazás fő könyvtárai

Minden iOS alkalmazásnak három fő könyvtára van, amelyek a FileManager-en keresztül érhetők el a Sandbox-on belül: Documents, Library és tmp. Mindegyiknek megvan a maga célja és biztonsági mentési szabályai, amelyek betartása elengedhetetlen az App Store-ellenőrzésen való áteséshez.

Documents — a felhasználói adatok számára, amelyeket meg kell őrizni az indítások között és biztonsági mentést kell készíteni iCloud-ba. Library — az alkalmazás fájljai számára: gyorsítótárak (Caches), beállítások (Preferences), adatbázisok (Application Support). tmp — ideiglenes fájlok számára, amelyeket a rendszer bármikor törölhet az alkalmazás indításai között.

KönyvtárFileManager URLBiztonsági mentésHasználat
Documents.documentDirectoryIgenFelhasználói adatok, fájlok, export
Library/Caches.cachesDirectoryNemKépgyorsítótárak, ideiglenes adatok
Library/Preferences.libraryDirectory + "/Preferences"IgenUserDefaults, alkalmazás beállítások
Library/Application Support.applicationSupportDirectoryIgenAdatbázisok, CoreData, Realm
tmp.tmpDirectory (NSTemporaryDirectory)NemMunkamenet ideiglenes fájljai

Apple-szabály: ha egy fájl visszaállítható az internetről vagy újra létrehozható — a Caches-ben kell tárolni (biztonsági mentés nélkül). Ha a fájl felhasználói adatokat tartalmaz — Documents (biztonsági mentéssel). A fájlok helytelen elhelyezése az alkalmazás elutasításának egyik gyakori oka, mivel az Apple ellenőrzi a Storage & iCloud Backup Guidelines betartását.

Fájlok olvasása és írása

FileManager maga nem biztosít metódusokat fájlok tartalmának olvasásához — ehhez az NSData(contentsOf), String(contentsOf) vagy FileHandle metódusokat használják. A FileManager a fájlok kezeléséért felelős: létezés ellenőrzése, áthelyezés, másolás, törlés.

Az adatok írásához a createFile(atPath:contents:attributes:) metódust vagy magas szintű API-kat használnak — data.write(to:), JSONEncoder.encode és PropertyListEncoder. A FileManager FileHandle-t is biztosít nagy fájlok stream-szerű olvasásához és írásához, amely nem tölti be a teljes fájlt a memóriába.

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

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

// JSON írása a Documents-be
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 olvasása
let loadedData = try Data(contentsOf: url)
let loadedSettings = try JSONDecoder()
    .decode(UserSettings.self, from: loadedData)

Íráskor használja a options: .atomic opciót — ez garantálja, hogy a fájl nem sérül meg írási hiba esetén: az adatok először egy ideiglenes fájlba kerülnek, majd atomi módon áthelyezésre kerülnek a célútvonalra. Nagy fájlok olvasásához használja a FileHandle-t .readingMode-dal, és olvassa az adatokat darabokban, ellenőrizve a memóriahasználatot.

Könyvtárak kezelése

FileManager metódusokat biztosít a könyvtárak teljes körű kezeléséhez: createDirectory (az összes közbenső mappa létrehozása a withIntermediateDirectories segítségével), contentsOfDirectory (fájllista lekérése), enumeratorAt (rekurzív bejárás) és subpathsOfDirectory (az összes útvonal a könyvtáron belül).

Az enumeratorAt metódus egy DirectoryEnumerator-t ad vissza, amely lehetővé teszi nagy könyvtárak hatékony bejárását anélkül, hogy a teljes tartalmat a memóriába töltené. Támogatja a szűrést a skipDescendants segítségével, és minden elem attribútumait szolgáltatja további fájlrendszer-lekérdezés nélkül.

swift
// Rekurzív könyvtárbejárás
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")
        }
    }
}

Könyvtár törléséhez használja a removeItem(at:)-t. Figyelem: a könyvtár törlése iOS-ben visszafordíthatatlan — a fájlok nem kerülnek a kukába, mint macOS-en. A törlés előtt győződjön meg arról, hogy már nem használ fájlokat ebből a könyvtárból, és hajtsa végre a műveletet egy háttérszálon, mert sok fájl törlése blokkolhatja a felhasználói felületet.

FileManager és iCloud

FileManager integrálódik az iCloud Drive-val az URLForUbiquityContainerIdentifier metóduson keresztül, amely visszaadja az iCloud könyvtár URL-jét az alkalmazás számára. A működéshez engedélyezni kell az iCloud capability-t a projektben, és hozzá kell adni a megfelelő entitlement-et.

Az iCloud fájlok automatikusan szinkronizálódnak, de a FileManager metódusokat biztosít a manuális vezérléshez: a startDownloadingUbiquitousItem kényszeríti a letöltés megkezdését, az evictUbiquitousItem törli a helyi másolatot, és az urlOfItem(at:) visszaadja a helyi URL-t az iCloud fájlhoz. Az NSMetadataQuery az iCloud-ban lévő fájlok keresésére szolgál.

Kritikus korlátozás: az iCloud Drive nem támogatott a Documents könyvtárban lévő fájlokhoz — csak az ubiquityContainer-ben lévő fájlokhoz. Ne próbálja szinkronizálni a Documents-t iCloud-on keresztül; ehhez használja az NSUbiquitousKeyValueStore-t kis adatmennyiségekhez vagy a Core Data-t CloudKit-tel összetett struktúrákhoz.

A FileManager teljesítménye

A FileManager-rel végzett műveletek költségesek lehetnek, különösen lassú flash memóriával rendelkező eszközökön. Az Apple fő ajánlásai közé tartozik az összes fájlművelet háttérsorokban történő végrehajtása, a fileExistsAtPath hívások számának minimalizálása és az eredmények gyorsítótárazásának használata.

A fileExists metódus egy rendszerhívást (stat()) hajt végre, amely viszonylag lassú. Ha egy fájl létezését ellenőrzi az olvasás előtt, jobb, ha azonnal megpróbálja olvasni és kezeli a hibát — ez ugyanazt a stat-ot hajtja végre, de kiküszöböli a dupla rendszerhívást. Tömeges ellenőrzésekhez használja az enumeratorAt-ot resourceValues paraméterrel.

A nagy adatmennyiségekkel való munka optimalizálásához:

  • Használja a FileHandle-t nagy fájlok stream-szerű feldolgozásához
  • Gyorsítótárazza a fileManager.urls eredményeit a gyakran használt könyvtárakhoz
  • Hajtsa végre a kötegelt műveleteket egy granulált sorban, elkerülve a fő szál blokkolását
  • Használja a CoordinatedFileManager-t a biztonságos többszálú hozzáféréshez

Az Apple Instruments File Activity sablont biztosít a fájlműveletek profilozásához. Használja a szűk keresztmetszetek azonosításához — például gyakori fileExists hívások egy ciklusban vagy írási műveletek a fő szálon. A leggyakoribb teljesítményproblémák nagy fájlok szinkron írásához kapcsolódnak az alkalmazás minimalizálásakor.

Gyakran ismételt kérdések

Mi a FileManager iOS-ben?

FileManager — a Foundation keretrendszer osztálya az Apple fájlrendszerrel való munkához. API-t biztosít fájlok és könyvtárak létrehozásához, olvasásához, áthelyezéséhez, törléséhez. iOS-ben a működése az alkalmazás Sandbox-ának kereteire korlátozódik, kivéve a Security-Scoped Bookmarks-okat.

Milyen könyvtárak érhetők el a FileManager-en keresztül iOS-ben?

Documents — felhasználói adatok iCloud biztonsági mentéssel. Library/Caches — gyorsítótárak biztonsági mentés nélkül. Library/Application Support — adatbázisok. tmp — ideiglenes fájlok. App Group Container — azonos csoport alkalmazásai közötti megosztott adatokhoz.

Hogyan kapom meg a Documents elérési útvonalát a FileManager-en keresztül?

Hívja meg a FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first-et. A metódus egy URL-t ad vissza a Documents könyvtár abszolút elérési útvonalával az aktuális alkalmazás Sandbox-án belül. A létezés ellenőrzéséhez használja a fileExists(atPath:)-t.

Hozzáférhetek más alkalmazások fájljaihoz a FileManager-en keresztül?

Nem, az iOS Sandbox tiltja a hozzáférést más alkalmazások fájlrendszeréhez. Kivételek: App Groups (megosztott könyvtár azonos fejlesztő alkalmazásai számára) és Security-Scoped Bookmarks (hozzáférés fájlokhoz UIDocumentPicker és iCloud Drive segítségével).

Hogyan írhatok biztonságosan fájlokat a FileManager-en keresztül?

Íráskor használja a .atomic opciót — az adatok először egy ideiglenes fájlba kerülnek, majd atomi módon áthelyezésre kerülnek a célútvonalra. Ez megakadályozza a fájl sérülését írási hiba esetén. Nagy adatokhoz használja a FileHandle-t 1-2 MB-os darabokban történő írással.

Összefoglalás

  • FileManager — a központi Foundation osztály az összes fájlrendszer-művelethez iOS-ben: a létezés ellenőrzésétől a rekurzív könyvtárbejárásig.
  • Documents, Library, tmp — az alkalmazás három fő könyvtára eltérő biztonsági mentési és életciklus-szabályokkal.
  • URL-alapú API előnyösebb a String-alapú útvonalaknál a Sandbox és Security-Scoped Bookmarks kompatibilitás miatt.
  • FileHandle és stream-feldolgozás — az egyetlen mód nagy fájlokkal való munkához memóriatúlcsordulás nélkül.
  • FileManagerDelegate lehetővé teszi az áthelyezési, másolási és törlési műveletek ellenőrzését should-metódusokon keresztül.
  • iCloud integráció elérhető az ubiquityContainer és NSMetadataQuery segítségével a felhőfájlokkal való munkához.
  • A fájlműveletek teljesítménye kritikus — hajtsa végre őket háttérsorokban és minimalizálja a fileExists hívásokat.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is