Trabajo con el sistema de archivos en Swift: Guía completa
La gestión de archivos y directorios es una de las tareas clave al desarrollar aplicaciones para iOS y macOS. En Swift, la herramienta principal para trabajar con el sistema de archivos es la clase FileManager. En este artículo, veremos cómo crear, leer, escribir, mover y eliminar archivos, así como cómo gestionar directorios de manera eficiente. Todos los ejemplos de código están escritos en Swift y son adecuados para proyectos en iOS y macOS.
Fundamentos de FileManager
FileManager es un singleton que proporciona una interfaz para interactuar con el sistema de archivos. Para usarlo, basta con obtener una instancia:
let fileManager = FileManager.defaultLa clase permite realizar prácticamente cualquier operación: verificar la existencia de archivos, obtener atributos, crear carpetas y mucho más. Es importante recordar que todas las operaciones de trabajo con el sistema de archivos pueden lanzar errores, por lo que usaremos la construcción do-catch.
Trabajo con directorios
Antes de crear archivos, debemos aprender a gestionar carpetas. Veamos las operaciones principales con directorios.
Verificar la existencia de un directorio
let documentsPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!let newFolderPath = documentsPath.appendingPathComponent("MyFolder")
if fileManager.fileExists(atPath: newFolderPath.path) { print("El directorio existe")} else { print("Directorio no encontrado")}Crear un directorio
do { try fileManager.createDirectory(at: newFolderPath, withIntermediateDirectories: true, attributes: nil) print("Directorio creado")} catch { print("Error al crear el directorio: \\(error.localizedDescription)")}El parámetro withIntermediateDirectories permite crear automáticamente todas las carpetas faltantes en la ruta. Por ejemplo, si desea crear Folder1/Folder2/Folder3 y Folder1 no existe, se creará automáticamente.
Obtener la lista de contenido de un directorio
do { let contents = try fileManager.contentsOfDirectory(at: documentsPath, includingPropertiesForKeys: nil) for item in contents { print("Elemento encontrado: \\(item.lastPathComponent)") }} catch { print("Error al leer el directorio: \\(error)")}Lectura y escritura de archivos
En Swift, existen varias formas de escribir y leer datos. Veamos las principales.
Escribir un archivo de texto
let text = "¡Hola, mundo! Este es un archivo de prueba."let filePath = documentsPath.appendingPathComponent("test.txt")
do { try text.write(to: filePath, atomically: true, encoding: .utf8) print("Archivo escrito exitosamente")} catch { print("Error de escritura: \\(error)")}Leer un archivo de texto
do { let savedText = try String(contentsOf: filePath, encoding: .utf8) print("Contenido del archivo: \\(savedText)")} catch { print("Error de lectura: \\(error)")}Trabajar con datos binarios
// Escrituralet data = "Binary data example".data(using: .utf8)!let binaryPath = documentsPath.appendingPathComponent("data.bin")
do { try data.write(to: binaryPath, options: .atomic) print("Datos binarios escritos")} catch { print("Error al escribir datos: \\(error)")}
// Lecturado { let loadedData = try Data(contentsOf: binaryPath) print("Leídos \\(loadedData.count) bytes")} catch { print("Error al leer datos: \\(error)")}Mover, copiar y eliminar archivos
La gestión de archivos incluye no solo la creación, sino también la trans