Curso Windows Phone – Manipulando arquivos texto no Windows Phone 8

storage-api-windows-phone-8Olá pessoal, tudo bom?

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.

wp-power-tools

Espero que tenham gostado. Grande abraço !

Eduardo Henrique Rizo

Post Relacionado: 

Coordenador de Internet da Universidade do Oeste Paulista (Unoeste) e professor universitário de disciplinas relacionadas ao desenvolvimento de sistemas para Web, gerenciamento de servidores, serviços e redes.

Marcado com: , , , , , , , , , , , , , , , ,
Publicado em Windows Phone
11 comentários em “Curso Windows Phone – Manipulando arquivos texto no Windows Phone 8
  1. […] Manipulando arquivos texto no Windows Phone 8 […]

  2. jean de almeida disse:

    Olá professor, quando é criado este arquivo TXT, ele não fica disponível ou eu não achei o arquivo .TXT nas pastas do windows phone quando conecto o cabo, é possível criar um arquivo que fique disponível quando conectar o cabo para que possa copia-lo?

  3. jean de almeida disse:

    Olá professor, não sei se vc vai ter algum exemplo de upload e download de um arquivo txt via skydrive (onedrive), consegui fazer upload, mais download não estou conseguindo. Se tiver alguma idéia agradeço…abraço.

  4. wallace disse:

    Olá Eduardo…
    Gostaria de saber se esse exemplo funcionaria se eu o fizesse da mesma forma no visual studio 2012 na criação de um APP para windows 8.

    Todos os exemplos para windows phone que temos aqui no seu site funcionam na criação de um APP para win 8?

    Obg

Deixe um comentário

Sorocaba e Região
Prestadora de serviços RIZZO GS - Sorocaba/SP

Serviços de limpeza, conservação, recepção, copa, portaria, vigia, zeladoria, jardim, elétrica, hidráulica, pintura, etc.

Contato: (15) 3357-4263 / (15) 3357-4502 - contato@rizzogs.com.br

Website: http://www.rizzogs.com.br