Sulla futura versione di windows phone purtroppo non ci sarà più la possibilità di accedere direttamente al file system del telefono, l'unico modo di accedere in lettura e scrittura ai files sarà l'Isolated Storage. Questo nuovo metodo di memorizzazione permetterà di avere applicazioni più sicure dato che tutte le operazioni su file avverranno un una specie di sandbox, delegando completamente al telefono la gestione delle proprie risorse, avendo così un maggior controllo sulla sicurezza delle applicazioni.
In questo esempio vediamo come creare un file nell'isolated storage e leggerne il contenuto, in più vediamo come visualizzare lo spazio libero. Secondo le specifiche Microsoft le applicazioni non hanno una quota fissata anche se dovrebbero fare uso attento delle risorse ed è comunque stato fissato un limite modificabile di 2 Gb.

Questo è lo XAML della pagina, abbiamo due textbox, una contenente il nome del file che vogliamo creare ed una contenente il contenuto da scrivere, sotto abbiamo il bottone per salvare poi un textblock per visualizzare lo spazio disponibile ed un altro per visualizzare il contenuto salvato nel file.
<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneBackgroundBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitleGrid is the name of the application and page title-->
<Grid x:Name="TitleGrid" Grid.Row="0">
<TextBlock Text="OLLIE10.IT" x:Name="textBlockPageTitle" Style="{StaticResource PhoneTextPageTitle1Style}"/>
<TextBlock Text="Isolated Storage" x:Name="textBlockListTitle" Style="{StaticResource PhoneTextPageTitle2Style}" FontSize="56" TextAlignment="Center" />
</Grid>
<Grid Grid.Row="2" Grid.Column="1" Height="269" HorizontalAlignment="Left" Margin="12,56,0,0" Name="grid1" VerticalAlignment="Top" Width="456">
<TextBox Height="72" HorizontalAlignment="Left" Margin="9,30,0,0" Name="FileName" Text="FileName.txt" VerticalAlignment="Top" Width="442" />
<TextBox Height="72" HorizontalAlignment="Left" Margin="8,98,0,0" Name="FileContent" Text="File Content" VerticalAlignment="Top" Width="442" />
<Button Content="Write To Storage" Height="72" HorizontalAlignment="Left" Margin="9,176,0,0" Name="button1" VerticalAlignment="Top" Width="441" Click="button1_Click" />
</Grid>
<Grid Grid.Row="1" Height="100" HorizontalAlignment="Left" Margin="12,364,0,0" Name="grid2" VerticalAlignment="Top" Width="456">
<Grid.RowDefinitions>
<RowDefinition Height="53*" />
<RowDefinition Height="47*" />
</Grid.RowDefinitions>
<TextBlock Height="63" HorizontalAlignment="Left" Margin="9,6,0,0" Name="UserQuota" Text="TextBlock" VerticalAlignment="Top" Width="441" Grid.RowSpan="2" />
</Grid>
<Grid Grid.Row="1" Height="114" HorizontalAlignment="Left" Margin="12,496,0,0" Name="grid3" VerticalAlignment="Top" Width="456">
<TextBlock Height="25" HorizontalAlignment="Left" Margin="23,6,0,0" Name="DisplayText" Text="" VerticalAlignment="Top" Width="405" />
<Button Content="Read File" Height="72" HorizontalAlignment="Left" Margin="23,30,0,0" Name="button2" VerticalAlignment="Top" Width="405" Click="button2_Click" />
</Grid>
<!--ContentGrid is empty. Place new content here-->
</Grid>
Nel codice abbiamo tutti gli handler che ci permettono di salvare e leggere il file.
public partial class MainPage : PhoneApplicationPage
{
// IL NOSTRO OGGETTO ISOLATED STORAGE SU CUI FARE LE OPERAZIONI
IsolatedStorageFile isoArea = IsolatedStorageFile.GetUserStoreForApplication();
public MainPage()
{
InitializeComponent();
SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
SetStorageText();
}
// ALLA PRESSIONE DEL BOTTONE WRITE CREA UN FILE NELLO STORAGE CON IL NOME DESIDERATO CONTENENTE QUELLO CHE ABBIAMO SCRITTO NELLA TEXTBOX
private void button1_Click(object sender, RoutedEventArgs e)
{
// CONTROLLO SE E' STATA CREATA LA CARTELLA CONTENITORE ALTRIMENTI LA CREO
if (!isoArea.DirectoryExists("Ollie10App"))
isoArea.CreateDirectory("Ollie10App");
using (StreamWriter writer = new StreamWriter(new IsolatedStorageFileStream("Ollie10App\\" + FileName.Text.ToLower(), FileMode.OpenOrCreate, isoArea)))
{
writer.WriteLine(FileContent.Text);
}
SetStorageText();
}
// ALLA PRESSIONE DEL BOTTONE READ LEGGE IL CONTENUTO DEL FILE E LO INSERIESCI IN UN TEXTBLOCK
private void button2_Click(object sender, RoutedEventArgs e)
{
using (StreamReader readFile = new StreamReader(new IsolatedStorageFileStream("Ollie10App\\" + FileName.Text.ToLower(), FileMode.Open, isoArea)))
{
DisplayText.Text = readFile.ReadLine();
}
}
// QUESTA FUNZIONE VISUALIZZERA' ALL'AVVIO E AD OGNI VOLTA CHE SI SCRIVE DENTRO UN FILE LO SPAZIO VUOTO
private void SetStorageText()
{
UserQuota.Text = string.Concat("You have: ", isoArea.AvailableFreeSpace, " bytes free");
}
}
I sorgenti completi dell'esempio sono disponibili qui; IsolatedStorage.zip (27,17 kb)