Travail avec le système de fichiers en Swift : guide pratique pour iOS/macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi travailler avec le système de fichiers en Swift est important

Toute application iOS ou macOS est tôt ou tard confrontée à la nécessité de sauvegarder des données sur l'appareil de l'utilisateur. Qu'il s'agisse de mettre en cache des images, de télécharger des documents ou de sauvegarder des paramètres, le travail avec le système de fichiers en Swift est une compétence fondamentale pour chaque développeur. Dans cet article, nous allons voir en pratique comment utiliser FileManager, travailler avec des répertoires, lire et écrire des fichiers, ainsi que gérer leurs attributs. Vous obtiendrez des exemples de code prêts à l'emploi que vous pourrez immédiatement appliquer dans votre projet.



Outils principaux : FileManager et URL

La classe centrale pour travailler avec le système de fichiers en Swift est FileManager. Elle fournit une interface unifiée pour interagir avec le système de fichiers, aussi bien sur iOS que sur macOS. Le deuxième composant clé est URL, utilisé pour spécifier les chemins vers les fichiers et les répertoires.



Obtention des répertoires standard

La première chose à savoir est comment obtenir les chemins vers les répertoires système : Documents, Library, Caches et Temporary. Voici comment faire :



import Foundation

let fileManager = FileManager.default

// Répertoire Documents — pour les données utilisateurguard let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else { fatalError("Impossible d'obtenir le répertoire Documents")}print("Documents : \\(documentsURL.path)")

// Répertoire Caches — pour les données temporaires mises en cachelet cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first!print("Caches : \\(cachesURL.path)")

// Répertoire temporaire — pour les fichiers pouvant être supprimés à tout momentlet tempURL = fileManager.temporaryDirectoryprint("Temp : \\(tempURL.path)")


Important : Sur iOS, une application ne peut écrire des données que dans son propre bac à sable (sandbox). L'accès aux fichiers système ou aux fichiers d'autres applications est interdit.



Création, lecture et écriture de fichiers

Passons maintenant aux opérations pratiques. Voyons comment créer des fichiers, y écrire des données et les lire.



Écrire des données dans un fichier

La méthode la plus simple consiste à utiliser la méthode write(to:) pour les chaînes de caractères ou les Data. Mais pour plus de fiabilité, utilisez toujours la gestion des erreurs :



let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!let fileURL = documentsURL.appendingPathComponent("example.txt")

let content = "Bonjour, Swift ! Ceci est un fichier de test."

do { try content.write(to: fileURL, atomically: true, encoding: .utf8) print("Fichier créé avec succès : \\(fileURL.lastPathComponent)")} catch { print("Erreur d'écriture : \\(error.localizedDescription)")}


Lire des données depuis un fichier

La lecture se fait de manière similaire — avec le constructeur String(contentsOf:) ou les méthodes de Data :



do {    let savedContent = try String(contentsOf: fileURL, encoding: .utf8)    print("Contenu du fichier : \\(savedContent)")} catch {    print("Erreur de lecture : \\(error.localizedDescription)")}


Travailler avec des données binaires (images, archives)

Pour les fichiers binaires, utilisez le type Data :



// Écriture de données binaireslet imageData = UIImage(named: "example.png")?.pngData()let imageURL = documentsURL.appendingPathComponent("image.png")

do { try imageData?.write(to: imageURL)} catch { print("Erreur d'écriture de l'image : \\(error)")}

// Lecture de données binairesif let loadedData = try? Data(contentsOf: imageURL) { let loadedImage = UIImage(data: loadedData) print("Image chargée : \\(loadedImage != nil)")}


Gestion des répertoires et des fichiers

Écrire et lire ne suffit pas. Il est souvent nécessaire de créer des sous-répertoires, déplacer, copier ou supprimer

Blogs

Book Recommendations