Desenvolvimento do Windows10 - Gerenciamento de arquivos
Em qualquer aplicação, o mais importante são os dados. Se você é.net desenvolvedor, você deve saber sobre o armazenamento isolado e o mesmo conceito segue através dos aplicativos da Plataforma Universal do Windows (UWP).
Localizações de arquivos
Essas são as áreas em que seu aplicativo pode acessar os dados. O aplicativo contém alguma área, que é privada para aquele aplicativo específico e inacessível para os outros, mas existem muitas outras áreas onde você pode armazenar e salvar seus dados dentro de um arquivo.
Abaixo estão as breves descrições de cada pasta.
S.No. | Pasta e descrição |
---|---|
1 | App package folder O gerenciador de pacotes instala todos os arquivos relacionados do aplicativo na pasta do pacote do aplicativo e o aplicativo só pode ler os dados dessa pasta. |
2 | Local folder Os aplicativos armazenam dados locais em uma pasta local. Ele pode armazenar dados até o limite do dispositivo de armazenamento. |
3 | Roaming folder A configuração e as propriedades relacionadas ao aplicativo são armazenadas na pasta de roaming. Outros dispositivos também podem acessar os dados desta pasta. Seu tamanho é limitado a 100 KB por aplicativo. |
4 | Temp Folder Uso de armazenamento temporário e não há garantia de que ainda estará disponível quando seu aplicativo for executado novamente. |
5 | Publisher Share Armazenamento compartilhado para todos os aplicativos do mesmo editor. É declarado no manifesto do aplicativo. |
6 | Credential Locker Usado para armazenamento seguro de objetos de credenciais de senha. |
7 | OneDrive OneDrive é um armazenamento online gratuito que vem com sua conta da Microsoft. |
8 | Cloud Armazene dados na nuvem. |
9 | Known folders Essas pastas já são pastas conhecidas, como Minhas imagens, Vídeos e Música. |
10 | Removable storage Dispositivo de armazenamento USB ou disco rígido externo etc. |
APIs de manipulação de arquivos
No Windows 8, novas APIs foram introduzidas para manipulação de arquivos. Essas APIs estão localizadas noWindows.Storage e Windows.Storage.Streamsnamespaces. Você pode usar essas APIs em vez doSystem.IO.IsolatedStoragenamespace. Usando essas APIs, será mais fácil portar seu aplicativo do Windows Phone para a Windows Store e você pode atualizar facilmente seus aplicativos para versões futuras do Windows.
Para acessar pastas locais, de roaming ou temporárias, você precisa chamar essas APIs -
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFolder roamingFolder = ApplicationData.Current.RoamingFolder;
StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder;
Para criar um novo arquivo em uma pasta local, use o seguinte código -
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.CreateFileAsync(filename,
CreationCollisionOption.ReplaceExisting);
Aqui está o código para abrir o arquivo recém-criado e escrever algum conteúdo nesse arquivo.
using (IRandomAccessStream textStream = await textFile.OpenAsync(FileAccessMode.ReadWrite)) {
using (DataWriter textWriter = new DataWriter(textStream)){
textWriter.WriteString(contents);
await textWriter.StoreAsync();
}
}
Você pode abrir o mesmo arquivo novamente, a partir da pasta local, conforme mostrado no código fornecido a seguir.
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 entender como funciona a leitura e a gravação dos dados, vamos dar uma olhada em um exemplo simples. A seguir está o código XAML no qual diferentes controles são adicionados.
<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>
Dada a seguir está a implementação do C # para diferentes eventos e também a implementação do FileHelper classe para ler e gravar dados no arquivo 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;
}
}
}
Quando o código acima for compilado e executado, você verá a seguinte janela.
Agora, você escreve algo na caixa de texto e clica “Write Data to File”botão. O programa gravará os dados no arquivo de texto em uma pasta local. Se você clicar em“Read Data from File” , o programa lerá os dados do mesmo arquivo de texto, que está localizado na pasta local, e os exibirá no bloco de texto.