Desarrollo de Windows10 - Gestión de archivos
En cualquier aplicación, lo más importante son los datos. Si usted es.net desarrollador, es posible que conozca el almacenamiento aislado y el mismo concepto sigue a través de las aplicaciones de la Plataforma universal de Windows (UWP).
Ubicaciones de archivos
Estas son las áreas donde su aplicación puede acceder a los datos. La aplicación contiene un área, que es privada para esa aplicación en particular y es inaccesible para las demás, pero hay muchas otras áreas donde puede almacenar y guardar sus datos dentro de un archivo.
A continuación se presentan breves descripciones de cada carpeta.
S.No. | Carpeta y descripción |
---|---|
1 | App package folder El administrador de paquetes instala todos los archivos relacionados de la aplicación en la carpeta del paquete de la aplicación, y la aplicación solo puede leer datos de esta carpeta. |
2 | Local folder Las aplicaciones almacenan datos locales en una carpeta local. Puede almacenar datos hasta el límite del dispositivo de almacenamiento. |
3 | Roaming folder La configuración y las propiedades relacionadas con la aplicación se almacenan en la carpeta de itinerancia. Otros dispositivos también pueden acceder a los datos de esta carpeta. Tiene un tamaño limitado de hasta 100 KB por aplicación. |
4 | Temp Folder Uso de almacenamiento temporal y no hay garantía de que aún estará disponible cuando su aplicación se ejecute nuevamente. |
5 | Publisher Share Almacenamiento compartido para todas las aplicaciones del mismo editor. Se declara en el manifiesto de la aplicación. |
6 | Credential Locker Se utiliza para el almacenamiento seguro de objetos de credenciales de contraseña. |
7 | OneDrive OneDrive es un almacenamiento en línea gratuito que viene con su cuenta de Microsoft. |
8 | Cloud Almacene datos en la nube. |
9 | Known folders Estas carpetas ya son carpetas conocidas como Mis imágenes, Vídeos y Música. |
10 | Removable storage Dispositivo de almacenamiento USB o disco duro externo, etc. |
API de manejo de archivos
En Windows 8, se introdujeron nuevas API para el manejo de archivos. Estas API se encuentran en elWindows.Storage y Windows.Storage.Streamsespacios de nombres. Puede utilizar estas API en lugar deSystem.IO.IsolatedStorageespacio de nombres. Al usar estas API, será más fácil migrar su aplicación de Windows Phone a la Tienda Windows y podrá actualizar fácilmente sus aplicaciones a versiones futuras de Windows.
Para acceder a carpetas locales, itinerantes o temporales, debe llamar a estas API:
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFolder roamingFolder = ApplicationData.Current.RoamingFolder;
StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder;
Para crear un nuevo archivo en una carpeta local, use el siguiente código:
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.CreateFileAsync(filename,
CreationCollisionOption.ReplaceExisting);
Aquí está el código para abrir el archivo recién creado y escribir algo de contenido en ese archivo.
using (IRandomAccessStream textStream = await textFile.OpenAsync(FileAccessMode.ReadWrite)) {
using (DataWriter textWriter = new DataWriter(textStream)){
textWriter.WriteString(contents);
await textWriter.StoreAsync();
}
}
Puede abrir el mismo archivo nuevamente, desde la carpeta local como se muestra en el código que se proporciona a continuación.
using (IRandomAccessStream textStream = await textFile.OpenReadAsync()) {
using (DataReader textReader = new DataReader(textStream)){
uint textLength = (uint)textStream.Size;
await textReader.LoadAsync(textLength);
contents = textReader.ReadString(textLength);
}
}
Para comprender cómo funciona la lectura y escritura de datos, echemos un vistazo a un ejemplo sencillo. A continuación se muestra el código XAML en el que se agregan diferentes controles.
<Page
x:Class = "UWPFileHandling.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:UWPFileHandling"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button x:Name = "readFile" Content = "Read Data From File"
HorizontalAlignment = "Left" Margin = "62,518,0,0"
VerticalAlignment = "Top" Height = "37" Width = "174"
Click = "readFile_Click"/>
<TextBox x:FieldModifier = "public" x:Name = "textBox"
HorizontalAlignment = "Left" Margin = "58,145,0,0" TextWrapping = "Wrap"
VerticalAlignment = "Top" Height = "276" Width = "245"/>.
<Button x:Name = "writeFile" Content = "Write Data to File"
HorizontalAlignment = "Left" Margin = "64,459,0,0"
VerticalAlignment = "Top" Click = "writeFile_Click"/>
<TextBlock x:Name = "textBlock" HorizontalAlignment = "Left"
Margin = "386,149,0,0" TextWrapping = "Wrap"
VerticalAlignment = "Top" Height = "266" Width = "250"
Foreground = "#FF6231CD"/>
</Grid>
</Page>
A continuación se muestra la implementación de C # para diferentes eventos y también la implementación de la FileHelper clase para leer y escribir datos en el archivo de texto.
using System;
using System.IO;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace UWPFileHandling {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public partial class MainPage : Page {
const string TEXT_FILE_NAME = "SampleTextFile.txt";
public MainPage(){
this.InitializeComponent();
}
private async void readFile_Click(object sender, RoutedEventArgs e) {
string str = await FileHelper.ReadTextFile(TEXT_FILE_NAME);
textBlock.Text = str;
}
private async void writeFile_Click(object sender, RoutedEventArgs e) {
string textFilePath = await FileHelper.WriteTextFile(TEXT_FILE_NAME, textBox.Text);
}
}
public static class FileHelper {
// Write a text file to the app's local folder.
public static async Task<string>
WriteTextFile(string filename, string contents) {
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.CreateFileAsync(filename,
CreationCollisionOption.ReplaceExisting);
using (IRandomAccessStream textStream = await
textFile.OpenAsync(FileAccessMode.ReadWrite)){
using (DataWriter textWriter = new DataWriter(textStream)){
textWriter.WriteString(contents);
await textWriter.StoreAsync();
}
}
return textFile.Path;
}
// Read the contents of a text file from the app's local folder.
public static async Task<string> ReadTextFile(string filename) {
string contents;
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.GetFileAsync(filename);
using (IRandomAccessStream textStream = await textFile.OpenReadAsync()){
using (DataReader textReader = new DataReader(textStream)){
uint textLength = (uint)textStream.Size;
await textReader.LoadAsync(textLength);
contents = textReader.ReadString(textLength);
}
}
return contents;
}
}
}
Cuando se compile y ejecute el código anterior, verá la siguiente ventana.
Ahora, escribe algo en el cuadro de texto y haz clic en “Write Data to File”botón. El programa escribirá los datos en el archivo de texto en una carpeta local. Si hace clic en“Read Data from File” , el programa leerá los datos del mismo archivo de texto, que se encuentra en la carpeta local y lo mostrará en el bloque de texto.