Introduction
\nTravailler avec le système de fichiers est l'une des tâches clés lors du développement d'applications pour iOS et macOS. Que vous écriviez une application pour sauvegarder des données utilisateur, mettre en cache des images ou exporter des documents, comprendre les bases de la gestion des fichiers en Swift est une compétence essentielle. Dans cet article, nous allons explorer des exemples pratiques de travail avec le système de fichiers : création, lecture, écriture, suppression de fichiers et gestion des répertoires.
\nApple fournit une API puissante FileManager qui permet d'interagir avec le système de fichiers à la fois sur iOS et macOS. Nous allons l'examiner à travers des exemples concrets avec du code prêt à l'emploi.
1. Obtention des chemins des répertoires système
\nAvant de commencer à travailler avec les fichiers, il est nécessaire d'accéder aux bons répertoires. Sous iOS et macOS, chaque application fonctionne dans un bac à sable (sandbox) isolé. Pour stocker des données, utilisez les chemins suivants :
\n\nRépertoire Documents
\nUtilisé pour stocker les données utilisateur qui doivent être conservées lors des mises à jour de l'application et des sauvegardes.
\nimport Foundation\n\nfunc getDocumentsDirectory() -> URL {\n let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)\n return paths[0]\n}\n\n// Exemple d'utilisation\nlet documentsURL = getDocumentsDirectory()\nprint("Chemin Documents : \\(documentsURL.path)")\n\nRépertoire Caches
\nPour les fichiers temporaires qui peuvent être recréés (par exemple, le cache d'images).
\nfunc getCachesDirectory() -> URL {\n let paths = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)\n return paths[0]\n}\n\nRépertoire Library/Application Support
\nPour stocker des données qui ne doivent pas être directement accessibles à l'utilisateur, mais qui doivent être conservées.
\nfunc getApplicationSupportDirectory() -> URL {\n let paths = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)\n let directory = paths[0]\n // Assurons-nous que le répertoire existe\n try? FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true)\n return directory\n}\n\n2. Création et écriture de fichiers
\nMaintenant que nous savons où stocker les fichiers, apprenons à les créer et à y écrire des données.
\n\nÉcriture de données textuelles
\nLa méthode la plus simple consiste à utiliser la méthode write(to:) d'une chaîne de caractères ou de Data.
func writeTextFile() {\n let fileName = "example.txt"\n let documentsURL = getDocumentsDirectory()\n let fileURL = documentsURL.appendingPathComponent(fileName)\n \n let content = "Bonjour, Swift ! Ceci est un fichier de test."\n \n do {\n try content.write(to: fileURL, atomically: true, encoding: .utf8)\n print("Fichier créé avec succès : \\(fileURL.path)")\n } catch {\n print("Erreur d'écriture du fichier : \\(error.localizedDescription)")\n }\n}\n\nÉcriture de données binaires (images, JSON)
\nPour travailler avec des données binaires, utilisons 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": "Développeur Swift",\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("Fichier JSON sauvegardé")\n } catch {\n print("Erreur : \\(error)")\n }\n}\n\nCréation de répertoires
\nParfois, il est nécessaire de créer des dossiers imbriqués pour organiser les fichiers.
\nfunc createSubdirectories() {\n let documentsURL = getDocumentsDirectory()\n let subDirURL = documentsURL.appendingPathCo