Einleitung
\nDie Arbeit mit dem Dateisystem ist eine der wichtigsten Aufgaben bei der Entwicklung von Anwendungen für iOS und macOS. Unabhängig davon, ob Sie eine App zum Speichern von Benutzerdaten, zum Zwischenspeichern von Bildern oder zum Exportieren von Dokumenten schreiben, ist das Verständnis der Grundlagen der Dateiarbeit in Swift eine unverzichtbare Fähigkeit. In diesem Artikel werden wir praktische Beispiele für die Arbeit mit dem Dateisystem durchgehen: Erstellen, Lesen, Schreiben, Löschen von Dateien und Verwalten von Verzeichnissen.
\nApple bietet eine leistungsstarke API FileManager, die es ermöglicht, sowohl unter iOS als auch unter macOS mit dem Dateisystem zu interagieren. Wir werden sie anhand von realen Beispielen mit fertigem Code betrachten.
1. Pfade zu Systemverzeichnissen abrufen
\nBevor Sie mit Dateien arbeiten, müssen Sie Zugriff auf die richtigen Verzeichnisse erhalten. Unter iOS und macOS arbeitet jede Anwendung in einer isolierten Sandbox. Verwenden Sie die folgenden Pfade zum Speichern von Daten:
\n\nDocuments-Verzeichnis
\nWird zum Speichern von Benutzerdaten verwendet, die bei App-Updates und Backups erhalten bleiben sollen.
\nimport Foundation\n\nfunc getDocumentsDirectory() -> URL {\n let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)\n return paths[0]\n}\n\n// Beispielverwendung\nlet documentsURL = getDocumentsDirectory()\nprint("Documents path: \\(documentsURL.path)")\n\nCaches-Verzeichnis
\nFür temporäre Dateien, die neu erstellt werden können (z. B. Bildercache).
\nfunc getCachesDirectory() -> URL {\n let paths = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)\n return paths[0]\n}\n\nLibrary/Application Support-Verzeichnis
\nZum Speichern von Daten, die für den Benutzer nicht direkt zugänglich sein sollen, aber erhalten bleiben müssen.
\nfunc getApplicationSupportDirectory() -> URL {\n let paths = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)\n let directory = paths[0]\n // Stellen Sie sicher, dass das Verzeichnis existiert\n try? FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true)\n return directory\n}\n\n2. Dateien erstellen und schreiben
\nNachdem wir nun wissen, wo wir Dateien speichern, lernen wir, wie man sie erstellt und Daten schreibt.
\n\nTextdaten schreiben
\nDer einfachste Weg ist die Verwendung der Methode write(to:) bei einem String oder Data.
func writeTextFile() {\n let fileName = "example.txt"\n let documentsURL = getDocumentsDirectory()\n let fileURL = documentsURL.appendingPathComponent(fileName)\n \n let content = "Hello, Swift! Dies ist eine Testdatei."\n \n do {\n try content.write(to: fileURL, atomically: true, encoding: .utf8)\n print("Datei erfolgreich erstellt: \\(fileURL.path)")\n } catch {\n print("Fehler beim Schreiben der Datei: \\(error.localizedDescription)")\n }\n}\n\nBinärdaten schreiben (Bilder, JSON)
\nFür die Arbeit mit Binärdaten verwenden wir Data.
func writeJSONFile() {\n let fileName = "data.json"\n let documentsURL = getDocumentsDirectory()\n let fileURL = documentsURL.appendingPathComponent(fileName)\n \n let dictionary: [String: Any] = [\n "name": "Swift Developer",\n "age": 30,\n "skills": ["iOS", "macOS", "SwiftUI"]\n ]\n \n do {\n let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: .prettyPrinted)\n try jsonData.write(to: fileURL, options: .atomic)\n print("JSON-Datei gespeichert")\n } catch {\n print("Fehler: \\(error)")\n }\n}\n\nVerzeichnisse erstellen
\nManchmal müssen verschachtelte Ordner erstellt werden, um Dateien zu organisieren.
\nfunc createSubdirectories() {\n let documentsURL = getDocumentsDirectory()\n let subDirURL = documentsURL.appendingPathCo