FileManager — τι είναι, εργασία με το σύστημα αρχείων iOS

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-07-09 Χρόνος ανάγνωσης: 9 λεπ

FileManager — είναι μια κλάση από το Foundation framework που παρέχει διεπαφή για εργασία με το σύστημα αρχείων iOS, macOS και άλλων πλατφορμών Apple. Επιτρέπει τη δημιουργία, ανάγνωση, μετακίνηση και διαγραφή αρχείων και καταλόγων, καθώς και τη διαχείριση μεταδεδομένων και δικαιωμάτων πρόσβασης. Στο iOS, όλες οι λειτουργίες του FileManager περιορίζονται από το Sandbox της εφαρμογής. Σύμφωνα με το Apple Developer Documentation (2026), το FileManager είναι thread-safe και μπορεί να χρησιμοποιηθεί από νήματα παρασκηνίου, αλλά όλες οι λειτουργίες με το σύστημα αρχείων πρέπει να εκτελούνται λαμβάνοντας υπόψη το sandbox και τα δικαιώματα πρόσβασης Security-Scoped Bookmarks.

Κύρια σημεία

  • FileManager — η κύρια κλάση Foundation για λειτουργίες συστήματος αρχείων: ανάγνωση, εγγραφή, μετακίνηση, διαγραφή αρχείων.
  • Το Sandbox περιορίζει την πρόσβαση του FileManager μόνο στους καταλόγους της εφαρμογής — Documents, Library, tmp και App Group.
  • API βασισμένο σε URL (fileManager.urls) προτιμάται έναντι του String-based (NSHomeDirectory) για σύγχρονες εφαρμογές.
  • FileManagerDelegate επιτρέπει την παρακολούθηση και τον έλεγχο λειτουργιών αρχείων μέσω shouldMoveItemAt και shouldRemoveItemAt.
  • iCloud Drive είναι προσβάσιμο μέσω FileManager με ενεργοποιημένο ubiquityContainer και αντίστοιχα entitlements.

Τι είναι το FileManager

FileManager — μια κλάση singleton από το Foundation framework που παρέχει ενοποιημένο API για αλληλεπίδραση με το σύστημα αρχείων σε όλες τις πλατφόρμες Apple. Είναι προσβάσιμο μέσω FileManager.default ή με δημιουργία μιας παρουσίας με προσαρμοσμένο εκπρόσωπο.

Οι κύριες δυνατότητες της κλάσης περιλαμβάνουν: έλεγχο ύπαρξης αρχείου (fileExists), δημιουργία καταλόγων (createDirectory), αντιγραφή και μετακίνηση (copyItem, moveItem), διαγραφή (removeItem), λήψη χαρακτηριστικών (attributesOfItem) και περιεχομένων καταλόγων (contentsOfDirectory). Το FileManager συνδέεται στενά με τα NSData, String και JSONEncoder/Decoder για σειριοποίηση δεδομένων.

Το FileManager είναι thread-safe: η Apple εγγυάται την ασφάλεια κλήσης μεθόδων από διαφορετικά νήματα. Ωστόσο, οι λειτουργίες συστήματος αρχείων μπορεί να είναι αργές σε μεγάλα αρχεία, γι' αυτό η Apple συνιστά την εκτέλεσή τους σε ουρά παρασκηνίου (DispatchQueue.global) και την κλήση μεθόδων FileManagerDelegate για ενημέρωση σχετικά με την πρόοδο.

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

Κάθε εφαρμογή iOS έχει τρεις κύριους καταλόγους προσβάσιμους μέσω FileManager εντός Sandbox: Documents, Library και tmp. Κάθε ένας έχει τον δικό του σκοπό και κανόνες δημιουργίας αντιγράφων ασφαλείας, η τήρηση των οποίων είναι κρίσιμη για την έγκριση από το App Store.

Documents — για δεδομένα χρήστη που πρέπει να διατηρούνται μεταξύ εκκινήσεων και να δημιουργούνται αντίγραφα ασφαλείας στο iCloud. Library — για αρχεία εφαρμογής: προσωρινή μνήμη (Caches), ρυθμίσεις (Preferences), βάσεις δεδομένων (Application Support). tmp — για προσωρινά αρχεία που μπορούν να διαγραφούν από το σύστημα ανά πάσα στιγμή μεταξύ εκκινήσεων της εφαρμογής.

ΚατάλογοςURL FileManagerΑντίγραφο ασφαλείαςΧρήση
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 για ροή ανάγνωσης και εγγραφής μεγάλων αρχείων, που δεν φορτώνει ολόκληρο το αρχείο στη μνήμη.

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

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

// Εγγραφή JSON στα Documents
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 — αυτό εγγυάται ότι το αρχείο δεν θα καταστραφεί σε περίπτωση αποτυχίας εγγραφής: τα δεδομένα αποθηκεύονται πρώτα σε ένα προσωρινό αρχείο και στη συνέχεια μετακινούνται ατομικά στη διαδρομή προορισμού. Για ανάγνωση μεγάλων αρχείων, χρησιμοποιήστε FileHandle με .readingMode και διαβάστε δεδομένα σε τμήματα, ελέγχοντας την κατανάλωση μνήμης.

Διαχείριση καταλόγων

FileManager παρέχει μεθόδους για πλήρη διαχείριση καταλόγων: createDirectory (δημιουργία όλων των ενδιάμεσων φακέλων μέσω withIntermediateDirectories), contentsOfDirectory (λήψη λίστας αρχείων), enumeratorAt (αναδρομική διάσχιση) και subpathsOfDirectory (όλες οι διαδρομές εντός καταλόγου).

Η μέθοδος enumeratorAt επιστρέφει ένα DirectoryEnumerator που επιτρέπει αποτελεσματική διάσχιση μεγάλων καταλόγων χωρίς φόρτωση ολόκληρου του περιεχομένου στη μνήμη. Υποστηρίζει φιλτράρισμα μέσω skipDescendants και παρέχει χαρακτηριστικά κάθε στοιχείου χωρίς πρόσθετο ερώτημα στο σύστημα αρχείων.

swift
// Αναδρομική διάσχιση καταλόγου
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 και iCloud

FileManager ενσωματώνεται με το iCloud Drive μέσω της μεθόδου URLForUbiquityContainerIdentifier, η οποία επιστρέφει το URL του καταλόγου iCloud για την εφαρμογή. Για λειτουργία απαιτείται ενεργοποίηση του iCloud capability στο έργο και προσθήκη του αντίστοιχου entitlement.

Τα αρχεία iCloud συγχρονίζονται αυτόματα, αλλά το FileManager παρέχει μεθόδους για χειροκίνητο έλεγχο: η startDownloadingUbiquitousItem ξεκινά αναγκαστικά τη λήψη, η evictUbiquitousItem διαγράφει το τοπικό αντίγραφο και η urlOfItem(at:) επιστρέφει το τοπικό URL για το αρχείο iCloud. Το NSMetadataQuery χρησιμοποιείται για αναζήτηση αρχείων στο iCloud.

Κρίσιμος περιορισμός: το iCloud Drive δεν υποστηρίζεται για αρχεία στον κατάλογο Documents — μόνο για αρχεία στο ubiquityContainer. Μην επιχειρήσετε να συγχρονίσετε τα Documents μέσω iCloud· γι' αυτό χρησιμοποιήστε NSUbiquitousKeyValueStore για μικρούς όγκους δεδομένων ή Core Data με CloudKit για πολύπλοκες δομές.

Απόδοση FileManager

Οι λειτουργίες με FileManager μπορεί να είναι δαπανηρές, ειδικά σε συσκευές με αργή μνήμη flash. Οι κύριες συστάσεις της Apple περιλαμβάνουν εκτέλεση όλων των λειτουργιών αρχείων σε ουρές παρασκηνίου, ελαχιστοποίηση του αριθμού κλήσεων fileExistsAtPath και χρήση προσωρινής αποθήκευσης αποτελεσμάτων.

Η μέθοδος fileExists εκτελεί μια κλήση συστήματος stat(), η οποία είναι σχετικά αργή. Εάν ελέγχετε την ύπαρξη ενός αρχείου πριν το διαβάσετε, είναι καλύτερο να δοκιμάσετε αμέσως να το διαβάσετε και να χειριστείτε το σφάλμα — αυτό εκτελεί το ίδιο stat, αλλά εξαλείφει μια διπλή κλήση συστήματος. Για μαζικούς ελέγχους, χρησιμοποιήστε enumeratorAt με resourceValues.

Για βελτιστοποίηση εργασίας με μεγάλους όγκους δεδομένων:

  • Χρησιμοποιήστε FileHandle για επεξεργασία ροής μεγάλων αρχείων
  • Αποθηκεύστε προσωρινά τα αποτελέσματα fileManager.urls για συχνά χρησιμοποιούμενους καταλόγους
  • Εκτελέστε λειτουργίες παρτίδας σε μια κοκκώδη ουρά, αποφεύγοντας το μπλοκάρισμα του main thread
  • Χρησιμοποιήστε CoordinatedFileManager για ασφαλή πρόσβαση από πολλά νήματα

Το Apple Instruments παρέχει το πρότυπο File Activity για προφίλ λειτουργιών αρχείων. Χρησιμοποιήστε το για τον εντοπισμό σημείων συμφόρησης — για παράδειγμα, συχνές κλήσεις fileExists σε έναν βρόχο ή λειτουργίες εγγραφής στο main thread. Τα πιο συνηθισμένα προβλήματα απόδοσης σχετίζονται με σύγχρονη εγγραφή μεγάλων αρχείων κατά την ελαχιστοποίηση της εφαρμογής.

Συχνές ερωτήσεις

Τι είναι το FileManager στο iOS;

FileManager — κλάση του Foundation framework για εργασία με το σύστημα αρχείων Apple. Παρέχει API για δημιουργία, ανάγνωση, μετακίνηση, διαγραφή αρχείων και καταλόγων. Στο iOS, η λειτουργία του περιορίζεται από το Sandbox της εφαρμογής, με εξαίρεση τα Security-Scoped Bookmarks.

Ποιοι κατάλογοι είναι προσβάσιμοι μέσω FileManager στο iOS;

Documents — δεδομένα χρήστη με αντίγραφο ασφαλείας στο iCloud. Library/Caches — προσωρινή μνήμη χωρίς αντίγραφο ασφαλείας. Library/Application Support — βάσεις δεδομένων. tmp — προσωρινά αρχεία. App Group Container — για κοινόχρηστα δεδομένα μεταξύ εφαρμογών της ίδιας ομάδας.

Πώς λαμβάνω τη διαδρομή προς τα Documents μέσω FileManager;

Καλέστε FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first. Η μέθοδος επιστρέφει ένα URL με απόλυτη διαδρομή προς τον κατάλογο Documents εντός του Sandbox της τρέχουσας εφαρμογής. Για έλεγχο ύπαρξης, χρησιμοποιήστε fileExists(atPath:).

Μπορώ να έχω πρόσβαση σε αρχεία άλλων εφαρμογών μέσω FileManager;

Όχι, το Sandbox του iOS απαγορεύει την πρόσβαση στο σύστημα αρχείων άλλων εφαρμογών. Εξαιρέσεις: App Groups (κοινόχρηστος κατάλογος για εφαρμογές του ίδιου προγραμματιστή) και Security-Scoped Bookmarks (πρόσβαση σε αρχεία μέσω UIDocumentPicker και iCloud Drive).

Πώς γράφω αρχεία με ασφάλεια μέσω FileManager;

Χρησιμοποιήστε την επιλογή .atomic κατά την εγγραφή — τα δεδομένα αποθηκεύονται πρώτα σε ένα προσωρινό αρχείο και στη συνέχεια μετακινούνται ατομικά στη διαδρομή προορισμού. Αυτό αποτρέπει την καταστροφή του αρχείου σε περίπτωση αποτυχίας εγγραφής. Για μεγάλα δεδομένα, χρησιμοποιήστε FileHandle με εγγραφή σε τμήματα 1-2 MB.

Σύνοψη

  • FileManager — η κεντρική κλάση Foundation για όλες τις λειτουργίες συστήματος αρχείων στο iOS: από έλεγχο ύπαρξης έως αναδρομική διάσχιση καταλόγων.
  • Documents, Library, tmp — τρεις κύριοι κατάλογοι εφαρμογής με διαφορετικούς κανόνες αντιγράφων ασφαλείας και κύκλου ζωής.
  • API βασισμένο σε URL προτιμάται έναντι διαδρομών String-based για συμβατότητα με Sandbox και Security-Scoped Bookmarks.
  • FileHandle και επεξεργασία ροής — ο μόνος τρόπος εργασίας με μεγάλα αρχεία χωρίς υπερχείλιση μνήμης.
  • FileManagerDelegate επιτρέπει τον έλεγχο λειτουργιών μετακίνησης, αντιγραφής και διαγραφής μέσω should-μεθόδων.
  • Ενσωμάτωση iCloud είναι διαθέσιμη μέσω ubiquityContainer και NSMetadataQuery για εργασία με αρχεία cloud.
  • Η απόδοση λειτουργιών αρχείων είναι κρίσιμη — εκτελέστε τις σε ουρές παρασκηνίου και ελαχιστοποιήστε τις κλήσεις fileExists.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης