Sviluppo Windows10 - Gestione file

In qualsiasi applicazione, una delle cose più importanti sono i dati. Se sei.net sviluppatore, potresti conoscere l'archiviazione isolata e lo stesso concetto segue attraverso le applicazioni UWP (Universal Windows Platform).

Posizioni dei file

Queste sono le aree in cui la tua applicazione può accedere ai dati. L'applicazione contiene alcune aree, che sono private per quella particolare applicazione e sono inaccessibili alle altre, ma ci sono molte altre aree, dove puoi memorizzare e salvare i tuoi dati all'interno di un file.

Di seguito sono riportate le brevi descrizioni di ciascuna cartella.

S.No. Cartella e descrizione
1

App package folder

Il gestore pacchetti installa tutti i file correlati dell'app nella cartella del pacchetto dell'app e l'app può leggere solo i dati da questa cartella.

2

Local folder

Le applicazioni memorizzano i dati locali in una cartella locale. Può memorizzare i dati fino al limite sul dispositivo di archiviazione.

3

Roaming folder

L'impostazione e le proprietà relative all'applicazione sono memorizzate nella cartella roaming. Anche altri dispositivi possono accedere ai dati da questa cartella. Ha dimensioni limitate fino a 100 KB per applicazione.

4

Temp Folder

Utilizzo della memoria temporanea e non vi è alcuna garanzia che sarà ancora disponibile quando l'applicazione verrà eseguita di nuovo.

5

Publisher Share

Archiviazione condivisa per tutte le app dello stesso editore. È dichiarato nel manifesto dell'app.

6

Credential Locker

Utilizzato per l'archiviazione sicura degli oggetti delle credenziali della password.

7

OneDrive

OneDrive è uno spazio di archiviazione online gratuito fornito con il tuo account Microsoft.

8

Cloud

Archivia i dati sul cloud.

9

Known folders

Queste cartelle sono cartelle già note come Immagini, Video e Musica.

10

Removable storage

Dispositivo di archiviazione USB o disco rigido esterno ecc.

API per la gestione dei file

In Windows 8, sono state introdotte nuove API per la gestione dei file. Queste API si trovano inWindows.Storage e Windows.Storage.Streamsspazi dei nomi. Puoi usare queste API invece diSystem.IO.IsolatedStoragespazio dei nomi. Usando queste API, sarà più facile portare la tua app Windows Phone a Windows Store e potrai facilmente aggiornare le tue applicazioni alle versioni future di Windows.

Per accedere alle cartelle locali, in roaming o temporanee, è necessario chiamare queste API:

StorageFolder localFolder = ApplicationData.Current.LocalFolder; 
StorageFolder roamingFolder = ApplicationData.Current.RoamingFolder; 
StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder;

Per creare un nuovo file in una cartella locale utilizzare il codice seguente:

StorageFolder localFolder = ApplicationData.Current.LocalFolder; 
StorageFile textFile = await localFolder.CreateFileAsync(filename, 
   CreationCollisionOption.ReplaceExisting);

Ecco il codice per aprire il file appena creato e scrivere del contenuto in quel file.

using (IRandomAccessStream textStream = await textFile.OpenAsync(FileAccessMode.ReadWrite)) { 
	
   using (DataWriter textWriter = new DataWriter(textStream)){
      textWriter.WriteString(contents); 
      await textWriter.StoreAsync(); 
   } 
		
}

È possibile aprire nuovamente lo stesso file, dalla cartella locale come mostrato nel codice riportato di seguito.

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); 
   } 
	
}

Per capire come funziona la lettura e la scrittura dei dati, diamo uno sguardo ad un semplice esempio. Di seguito è riportato il codice XAML in cui vengono aggiunti diversi controlli.

<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>

Di seguito è riportata l'implementazione C # per diversi eventi e anche l'implementazione di FileHelper classe per leggere e scrivere dati nel file di testo.

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 il codice sopra è stato compilato ed eseguito, vedrai la seguente finestra.

Ora scrivi qualcosa nella casella di testo e fai clic “Write Data to File”pulsante. Il programma scriverà i dati nel file di testo in una cartella locale. Se fai clic su“Read Data from File” pulsante, il programma leggerà i dati dallo stesso file di testo, che si trova nella cartella locale e li visualizzerà sul blocco di testo.