Trabajar con archivos

Este tema aborda lo que necesitas saber para comenzar a leer y escribir en archivos en una aplicación de la Plataforma universal de Windows (UWP). Se presentan las API y los tipos principales y se proporcionan vínculos que te ayudarán a obtener más información.

Este no es un tutorial. Si quieres ver un tutorial, consulta Crear, escribir y leer un archivo que, además de mostrar cómo crear, leer y escribir un archivo, muestra cómo usar los búferes y las secuencias. Quizá también te interese el Ejemplo de acceso a archivos que muestra cómo crear, leer, escribir, copiar y eliminar un archivo, así como los métodos para recuperar las propiedades de un archivo y recordar un archivo o carpeta para que la aplicación pueda tener acceso a ellos nuevamente de forma fácil.

Examinaremos el código para escribir y leer texto desde un archivo y cómo acceder a las carpetas locales, de itinerancia y temporales de la aplicación.

¿Qué debes saber?

Estos son los tipos principales que necesitas conocer para leer o escribir texto desde/en un archivo:

  • Windows.Storage.StorageFile representa un archivo. Esta clase tiene propiedades que proporcionan información sobre el archivo y los métodos para crear, abrir, copiar, eliminar y cambiar el nombre de los archivos. Puede usarse para tratar con rutas de acceso de cadenas. Hay algunas API de Windows Runtime que toman una ruta de acceso de cadena, pero con mayor frecuencia utilizará un StorageFile para representar a un archivo. Esto se debe a que algunos de los archivos con los que trabajará en UWP pueden no tener una ruta de acceso, o puede que sea una ruta de acceso difícil de usar. Usa StorageFile.GetFileFromPathAsync() para convertir una ruta de acceso de cadena en un StorageFile.

  • La clase FileIO proporciona una manera fácil de leer y escribir texto. Esta clase también puede leer/escribir una matriz de bytes o el contenido de un búfer. Esta clase es muy similar a la clase PathIO. La diferencia principal es que, en vez de tomar una ruta de acceso de cadena (como PathIO) toma un StorageFile.

  • Windows.Storage.StorageFolder representa una carpeta (directorio). Esta clase tiene métodos para crear archivos, consultar el contenido de una carpeta o para crear, cambiar el nombre de las carpetas y eliminarlas. Además, tiene propiedades que proporcionan información sobre una carpeta.

Entre las formas habituales de obtener un StorageFolder se incluyen:

Escribir texto en un archivo

En esta introducción, nos centraremos en un escenario simple: leer y escribir texto. Empecemos echando un vistazo a la parte del código que usa la clase FileIO para escribir texto en un archivo.

Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile file = await storageFolder.CreateFileAsync("test.txt",
        Windows.Storage.CreationCollisionOption.OpenIfExists);

await Windows.Storage.FileIO.WriteTextAsync(file, "Example of writing a string\r\n");

// Append a list of strings, one per line, to the file
var listOfStrings = new List<string> { "line1", "line2", "line3" };
await Windows.Storage.FileIO.AppendLinesAsync(file, listOfStrings); // each entry in the list is written to the file on its own line.

En primer lugar, identificamos dónde debe ubicarse el archivo. Windows.Storage.ApplicationData.Current.LocalFolder proporciona acceso a la carpeta local de datos, que se crea para tu aplicación cuando se instala. Consulta Acceder al sistema de archivos para obtener más información acerca de las carpetas a las que la aplicación puede acceder.

A continuación, usamos StorageFolder para crear el archivo (o abrirlo si ya existe).

La clase FileIO proporciona una forma práctica de escribir texto en el archivo. FileIO.WriteTextAsync() sustituye todo el contenido del archivo por el texto proporcionado. FileIO.AppendLinesAsync() anexa una colección de cadenas al archivo, escribiendo una cadena por línea.

Leer texto desde un archivo

Al igual que al escribir archivos, el primer paso para leer un archivo es especificar dónde se encuentra. Usaremos la misma ubicación que en el ejemplo anterior. A continuación, usaremos la clase FileIO para leer su contenido.

Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile file = await storageFolder.GetFileAsync("test.txt");

string text = await Windows.Storage.FileIO.ReadTextAsync(file);

También puedes leer cada línea del archivo en cadenas individuales de una colección con IList<string> contents = await Windows.Storage.FileIO.ReadLinesAsync(sampleFile);.

Acceder al sistema de archivos

En la plataforma UWP, el acceso a la carpeta está restringido para garantizar la integridad y la privacidad de los datos del usuario.

Carpetas de la aplicación

Cuando se instala una aplicación para UWP, se crean varias carpetas en c:\users\<nombre usuario>\AppData\Local\Packages\<identificador del paquete de aplicación>\ para almacenar, entre otras cosas, los archivos locales, de itinerancia y temporales de la aplicación. La aplicación no tiene que declarar las funcionalidades para acceder a estas carpetas, y otras aplicaciones no pueden acceder a estas carpetas. Estas carpetas también se eliminarán al desinstalar la aplicación.

Estas son algunas de las carpetas de la aplicación que normalmente se utilizan:

  • LocalState: para los datos locales del dispositivo actual. Cuando se hace una copia de seguridad del dispositivo, los datos de este directorio se guardan en una imagen de copia de seguridad en OneDrive. Si el usuario restablece o reemplaza el dispositivo, se restaurarán los datos. Accede a esta carpeta con Windows.Storage.ApplicationData.Current.LocalFolder. Guarda los datos locales para los que no quieres una copia de seguridad de OneDrive en la carpeta LocalCacheFolder, a la que puedes acceder con Windows.Storage.ApplicationData.Current.LocalCacheFolder.

  • RoamingState: los datos almacenados aquí ya no se mueven (a partir de Windows 11), pero la carpeta sigue estando disponible. Accede a la carpeta de itinerancia con Windows.Storage.ApplicationData.Current.RoamingFolder. El reemplazo recomendado es Azure App Service. Azure App Service es ampliamente compatible, está bien documentado, es confiable y admite escenarios multiplataforma o entre ecosistemas, como iOS, Android y web.

  • TempState: para los datos que pueden eliminarse cuando la aplicación no se está ejecutando. Accede a esta carpeta con Windows.Storage.ApplicationData.Current.TemporaryFolder.

Acceder al resto del sistema de archivos

Una aplicación para UWP debe declarar su intención de acceder a una biblioteca de usuario específica agregando a su manifiesto la funcionalidad correspondiente. A continuación, se pide la confirmación del usuario durante la instalación de la aplicación para comprobar que autoriza el acceso a la biblioteca especificada. En caso contrario, la aplicación no se instala. Hay funcionalidades para acceder a las imágenes, vídeos y bibliotecas de música. Consulte Declaraciones de funcionalidades de la aplicación para obtener la lista completa. Para obtener una StorageFolder para estas bibliotecas, usa la clase Windows.Storage.KnownFolders.

Biblioteca de documentos

Aunque hay una funcionalidad para acceder a la biblioteca de documentos del usuario, está restringida; es decir que Microsoft Store rechazará a las aplicaciones que declaren esa funcionalidad a menos que sigas el proceso para obtener aprobación especial. No está prevista para uso general. En su lugar, usa el archivo o los selectores de archivo (consulta Abrir archivos y carpetas con un selector y Guardar un archivo con un selector) que permiten al usuario navegar a la carpeta o archivo. Cuando el usuario navega a una carpeta o archivo, implícitamente ha dado permiso de acceso a la aplicación y el sistema permite el acceso.

Acceso general

Como alternativa, la aplicación puede declarar la funcionalidad broadFileSystem restringida en su manifiesto, lo que también requiere la aprobación de Microsoft Store. A continuación, la aplicación puede acceder a cualquier archivo al que el usuario tenga acceso sin la intervención de un selector de archivos o carpetas.

Para obtener una lista completa de las ubicaciones a las que las aplicaciones pueden tener acceso, consulta Permisos de acceso de archivo.

API y documentos útiles

Este es un resumen rápido de las API y otra documentación de utilidad que te ayudarán a empezar a trabajar con archivos y carpetas.

API útiles

API Descripción
Windows.Storage.StorageFile Proporciona información sobre el archivo, además de los métodos para crear, abrir, copiar, eliminar y cambiar el nombre de los archivos.
Windows.Storage.StorageFolder Proporciona información sobre la carpeta, métodos para crear archivos, y métodos para crear, abrir, eliminar y cambiar el nombre de los archivos.
FileIO Proporciona una forma fácil de leer y escribir texto. Esta clase también puede leer/escribir una matriz de bytes o el contenido de un búfer.
PathIO Proporciona una manera sencilla de leer/escribir texto desde/a un archivo después de haber facilitado la ruta de acceso de cadena del archivo. Esta clase también puede leer/escribir una matriz de bytes o el contenido de un búfer.
DataReader y DataWriter Leer y escribir búferes, bytes, enteros, GUID, TimeSpan y más desde/hacia una secuencia.
Windows.Storage.ApplicationData.Current Proporciona acceso a las carpetas creadas para la aplicación, como la carpeta local, la carpeta de itinerancia y la carpeta de archivos temporales.
Windows.Storage.Pickers.FolderPicker Permite al usuario elegir una carpeta y devuelve una StorageFolder para ella. De esta forma, se obtiene acceso a las ubicaciones a las que la aplicación no puede acceder de manera predeterminada.
Windows.Storage.Pickers.FileOpenPicker Permite al usuario elegir un archivo para abrirlo y devuelve una clase StorageFile para él. De esta forma, se obtiene acceso al archivo al que la aplicación no puede acceder de manera predeterminada.
Windows.Storage.Pickers.FileSavePicker Permite al usuario elegir el nombre de archivo, la extensión y la ubicación de almacenamiento de un archivo. Devuelve una StorageFile . De esta forma, se guarda un archivo en una ubicación a la que la aplicación no puede acceder de manera predeterminada.
Espacio de nombres Windows.Storage.Streams Cubre las secuencias de lectura y escritura. En especial, fíjate en las clases DataReader y DataWriter que leen y escriben búferes, bytes, enteros, GUID, TimeSpan y mucho más.

Documentos útiles

Tema Descripción
Windows.Storage Namespace Documentos de referencia de API.
Archivos, carpetas y bibliotecas Documentos conceptuales.
Crear, escribir y leer archivos Cubre la creación, lectura y escritura de texto, datos binarios y secuencias.
Getting started storing app data locally (Introducción al almacenamiento local de datos de la aplicación) Además de cubrir los procedimientos recomendados para guardar los datos locales, aquí se aborda el propósito de la carpeta LocalSettings y LocalCache.
Almacenar y recuperar la configuración y otros datos de aplicación Proporciona una introducción a varios almacenes de datos de aplicación, como las carpetas locales, de itinerancia y temporales.
Permisos de acceso a archivos Información sobre las ubicaciones del sistema de archivo a las que puede acceder tu aplicación.
Abrir archivos y carpetas con un selector Muestra cómo acceder a archivos y carpetas, permite al usuario decidir a través de una interfaz de usuario de selector.
Windows.Storage.Streams Tipos usados para leer y escribir secuencias.
Archivos y carpetas de las bibliotecas de música, imágenes y vídeos Aborda cómo quitar carpetas de las bibliotecas, además del método para obtener la lista de carpetas de una biblioteca a fin de detectar archivos de vídeos, música y fotos almacenados.

Ejemplos de código útiles

Ejemplo de código Descripción
Application data sample (ejemplo de datos de aplicaciones) Muestra cómo almacenar y recuperar datos que son específicos de cada usuario mediante las API de datos de aplicaciones.
Ejemplo de acceso a archivos Muestra cómo crear, leer, escribir, copiar y eliminar un archivo.
Ejemplo de selector de archivos Muestra cómo acceder a archivos y carpetas al permitir que el usuario los elija con la interfaz de usuario. Además, muestra cómo guardar un archivo para que el usuario pueda especificar el nombre, el tipo de archivo y la ubicación de un archivo que va a guardarse.
JSON sample (ejemplo de JSON) Muestra cómo codificar y descodificar objetos, matrices, cadenas, números y booleanos de notación de objetos JavaScript (JSON) mediante el Espacio de nombres Windows.Data.Json.
Ejemplos de código adicionales Elige Files, folder, and libraries (Archivos, carpeta y bibliotecas) en la lista desplegable de categorías.