Trabajo con el sistema de archivos en Swift: conceptos básicos para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con el sistema de archivos en Swift: para principiantes



Trabajar con el sistema de archivos es una de las tareas clave al desarrollar aplicaciones para iOS y macOS. Ya sea para guardar datos de usuario, almacenar en caché imágenes o exportar documentos, inevitablemente tendrá que interactuar con archivos y carpetas. En este artículo, analizaremos las herramientas principales de Swift para trabajar con el sistema de archivos, incluyendo FileManager, rutas de directorios, creación, lectura, escritura y eliminación de archivos. El material está orientado a desarrolladores principiantes, por lo que todos los ejemplos serán lo más simples y claros posible.



Conceptos básicos: FileManager y rutas



La clase principal para trabajar con el sistema de archivos en Swift es FileManager. Es una envoltura sobre las llamadas estándar del sistema que proporciona una interfaz conveniente para gestionar archivos y carpetas. La mayoría de las veces se utiliza su singleton:



let fileManager = FileManager.default


Dado que las aplicaciones en iOS y macOS funcionan en un entorno aislado (sandbox), necesita saber dónde puede guardar datos. Los directorios principales a los que la aplicación tiene acceso son:



  • Documents — para documentos y datos de usuario que deben conservarse entre ejecuciones.
  • Caches — para archivos temporales que el sistema puede eliminar para liberar espacio.
  • Temporary — para archivos temporales que se eliminarán garantizadamente en el próximo reinicio del dispositivo.
  • Library/Application Support — para datos que no deben ser accesibles directamente por el usuario, pero que deben conservarse.


Puede obtener la ruta al directorio deseado usando el método urls(for:in:):



// Obtenemos la ruta a la carpeta Documentslet documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!print("Ruta de Documents: \\(documentsURL.path)")

// Obtenemos la ruta a la carpeta Cacheslet cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first!print("Ruta de Caches: \\(cachesURL.path)")

// Obtenemos la ruta a la carpeta temporallet tempURL = fileManager.temporaryDirectoryprint("Ruta temporal: \\(tempURL.path)")


Tenga en cuenta: el método devuelve un array de URL (en caso de que existan varias rutas), pero para los directorios de usuario normalmente se toma el primer elemento. En Swift moderno se recomienda usar URL en lugar de rutas de cadena, ya que es más seguro y conveniente.



Creación y escritura de archivos



Ahora que sabemos dónde guardar archivos, aprendamos a crearlos y escribir datos en ellos. Para escribir datos de texto, la forma más sencilla es usar el método write(to:atomically:encoding:) de la clase String:



// Creamos la ruta al archivo en la carpeta Documentslet fileURL = documentsURL.appendingPathComponent("myFile.txt")

// Texto para escribirlet content = "¡Hola, mundo! Este es mi primer archivo en Swift."

do { // Escribimos la cadena en el archivo try content.write(to: fileURL, atomically: true, encoding: .utf8) print("Archivo creado exitosamente: \\(fileURL.path)")} catch { print("Error al escribir el archivo: \\(error.localizedDescription)")}


El parámetro atomically: true significa que los datos se escribirán primero en un archivo temporal y luego se renombrarán al destino. Esto protege contra la corrupción del archivo en caso de fallo. Para datos binarios (por ejemplo, imágenes), se puede usar Data:



// Creamos datos binarios (por ejemplo, un array de bytes)let data = Data([0x48, 0x65, 0x6C, 0x6C, 0x6F]) // "Hello" en ASCII

let binaryFileURL = documentsURL.appendingPathComponent("data.bin")

do { try data.write(to: binaryFileURL, options: .atomic) print("Archivo binario creado")} catch { print("Error: \\(error)")}


Lectura de archivos y p

Blogs

Book Recommendations