Travailler avec les fichiers en Swift : de l'ouverture au chiffrement

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

Pourquoi Swift n'est pas seulement une question d'interface utilisateur, mais aussi de fichiers

\n\n

Lorsque les développeurs commencent à apprendre Swift, ils écrivent le plus souvent des applications avec des interfaces, des animations et des requêtes réseau. Mais tôt ou tard, une tâche se présente : sauvegarder des données sur l'appareil, lire un fichier de configuration, analyser un fichier JSON ou simplement copier un document. Et là, beaucoup sont perdus. À tort, car la manipulation des fichiers en Swift est si élégante et bien pensée qu'après cela, on n'a pas envie de revenir à d'autres langages.

\n\n

Dans cet article, nous allons explorer l'interaction avec le système de fichiers en Swift du simple au complexe. Vous apprendrez à créer, lire, écrire et supprimer des fichiers, à travailler avec des répertoires, à gérer les erreurs et même à chiffrer des données. C'est parti !

\n\n

Les bases : FileManager et FileHandle

\n\n

Le cœur du système de fichiers en Swift est la classe FileManager. C'est un « gestionnaire » qui sait tout sur les dossiers et fichiers de l'appareil. Il permet de vérifier l'existence, déplacer, copier et supprimer des objets. Pour travailler avec le contenu des fichiers (lecture et écriture), on utilise FileHandle ou des méthodes de plus haut niveau comme Data, String et Codable.

\n\n

Où stocker les fichiers ? Chemins et répertoires

\n\n

Avant d'écrire du code, il faut comprendre où nous avons le droit de sauvegarder des données. Sous iOS et macOS, il existe des règles strictes : une application ne peut écrire que dans son bac à sable (sandbox). Les répertoires les plus courants sont :

\n\n
    \n
  • Documents — pour les données utilisateur qui doivent être conservées lors des sauvegardes.
  • \n
  • Library/Caches — pour les fichiers temporaires que le système peut supprimer.
  • \n
  • tmp — pour les fichiers à usage unique, supprimés au redémarrage.
  • \n
\n\n

Obtenir le chemin vers le dossier souhaité est très simple :

\n\n
import Foundation\n\nlet fileManager = FileManager.default\nlet documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!\nprint("Documents: \\(documentsURL.path)")\n\nlet cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first!\nprint("Caches: \\(cachesURL.path)")
\n\n

Création et suppression de fichiers en Swift

\n\n

Commençons par le plus basique : créons un fichier vide dans le répertoire Documents :

\n\n
let fileURL = documentsURL.appendingPathComponent("myFile.txt")\n\n// Créer le fichier s'il n'existe pas\nif !fileManager.fileExists(atPath: fileURL.path) {\n    fileManager.createFile(atPath: fileURL.path, contents: nil, attributes: nil)\n    print("Fichier créé !")\n}
\n\n

Notez que createFile(atPath:contents:attributes:) renvoie un Bool qui indique si la création a réussi. Vérifiez toujours le résultat — cela vous évitera des erreurs inattendues.

\n\n

La suppression d'un fichier se fait en une seule ligne :

\n\n
do {\n    try fileManager.removeItem(at: fileURL)\n    print("Fichier supprimé")\n} catch {\n    print("Erreur de suppression : \\(error.localizedDescription)")\n}
\n\n

Ici, nous utilisons try et le bloc do-catch — l'approche standard pour la gestion des erreurs en Swift. N'appelez jamais removeItem sans vérification, sinon l'application plantera.

\n\n

Lecture et écriture de fichiers texte

\n\n

Le scénario le plus courant est le travail avec des données textuelles. Swift propose des méthodes pratiques pour lire un fichier en Swift et écrire via des chaînes de caractères :

\n\n
// Écriture de texte\nlet text = "Bonjour le monde ! Hello, Swift!"\ndo {\n    try text.write(to: fileURL, atomically: true, encoding: .utf8)\n    print("Texte écrit")\n} catch {\n    print("Erreur d'écriture : \\(error)")\n}\n\n// Lecture de texte\ndo {\n    let savedText = try String(contentsOf: fileURL, encoding: .utf8)\n    print("Lu : \\(savedText)")\n} catch {\n    print("Erreur de lecture : \\(error)")\n}
\n\n

Le drapeau atomically: true garantit que l'écriture sera atomique — d'abord les données sont écrites

Blogs

Book Recommendations