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.