Para quem já trabalha com desenvolvimento de APPs para Windows Phone desde a versão 7, sabe que para se manipular arquivos temos a classe IsolatedStoreFile, no entanto, para facilitar um pouco mais a vida do desenvolvedor, a Microsoft disponibilizou um novo conjunto de recursos para manipulação de arquivos no Windows Phone 8 denominada Storage API (StorageFile e StorageFolder).
Para demonstrar o uso desse novo recurso, resolvi criar um exemplo baseado no post IsolatedStorageFile: Armazenando dados da aplicação em arquivos texto, mas agora aplicando as novas classes do Windows Phone 8, sendo que o objetivo do exemplo é demonstrar a criação de um arquivo (notes.txt) dentro de uma pasta chamada (myNotes) e no arquivo gravar anotações que o usuário faça em um editor de textos fictício. Vejamos:
1º passo: Acessando a APP
Logo ao acessar a APP crio a pasta myNotes no LocalFolder da aplicação. Lembrando que esse diretório servirá para armazenar o arquivo notes.txt do usuário.
...
public Notepad()
{
InitializeComponent();
LerDados();
}
public async void LerDados()
{
//Método para criar a pasta que irá armazenar o arquivo de anotações
CriarPasta("myNotes");
//Após criar a pasta, precisamos da referência da mesma para ler o arquivo dentro dela
StorageFolder folder = await ApplicationData.Current.LocalFolder.GetFolderAsync("myNotes");
try
{
//Obtém a referência ao arquivo de anotações dentro da pasta myNotes
StorageFile file = await folder.GetFileAsync("notes.txt");
//Abre o arquivo para leitura, pega seu conteúdo e "joga" no textbox da APP
IRandomAccessStream randomAccessStream = await file.OpenAsync(FileAccessMode.Read);
using (DataReader reader = new DataReader(randomAccessStream.GetInputStreamAt(0)))
{
uint bytes = await reader.LoadAsync((uint)randomAccessStream.Size);
string texto = reader.ReadString(bytes);
txtTexto.Text = texto;
}
randomAccessStream.Dispose();
}
catch { }
}
private async void CriarPasta(string nomePasta)
{
StorageFolder folder;
try
{
//Verificar a existencia da pasta. Caso não encontre o fluxo é direcionado para o catch
folder = await ApplicationData.Current.LocalFolder.GetFolderAsync(nomePasta);
}
catch (FileNotFoundException ex)
{
folder = null;
}
if (folder == null)
//Cria a pasta dentro da organização de arquivos da APP
await ApplicationData.Current.LocalFolder.CreateFolderAsync(nomePasta);
}
2º passo: Gravando as anotações
Quanto o usuário seleciona o botão Gravar da APP o seguinte método é executado:
private async void btnGravar_Click(object sender, RoutedEventArgs e)
{
//Obtém referência à pasta myNotes para posteriormente criar o arquivo dentro dela
StorageFolder folder = await ApplicationData.Current.LocalFolder.GetFolderAsync("myNotes");
//Criando o arquivo dentro da pasta
StorageFile file = await folder.CreateFileAsync("notes.txt", CreationCollisionOption.ReplaceExisting);
//Abrindo o arquivo para Leitura e Escrita para "jogar" o conteúdo desejado dentro dele
IRandomAccessStream randomAccessStream = await file.OpenAsync(FileAccessMode.ReadWrite);
using (DataWriter writer = new DataWriter(randomAccessStream.GetOutputStreamAt(0)))
{
writer.WriteString(txtTexto.Text);
await writer.StoreAsync();
}
}
3º passo: Excluindo as anotações
Caso o usuário selecione a opção Limpar anotações da APP, excluímos o arquivo que armazena as notas.
private async void btnLimpar_Click(object sender, RoutedEventArgs e)
{
if (MessageBox.Show("Limpar anotações?", "Confirmação", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
//Obtém referência da pasta onde o arquivo está armazenado.
StorageFolder folder = await ApplicationData.Current.LocalFolder.GetFolderAsync("myNotes");
try
{
//Obtém referência do arquivo e depois tenta realizar a exclusão
StorageFile file = await folder.GetFileAsync("notes.txt");
await file.DeleteAsync();
txtTexto.Text = string.Empty;
}
catch
{
MessageBox.Show("Você não possui anotações.", "Informação", MessageBoxButton.OK);
}
}
}
A imagem abaixo demonstra a organização de arquivos da APP através da ferramenta WP Power Tools.
Espero que tenham gostado. Grande abraço !
Eduardo Henrique Rizo (@eduardorizo)
Post Relacionado:
Fonte: Blog do Eduardo H. Rizo
Comentários