April 22, 2013
Applies to: Windows Phone 8 only
The StorageFolder class is used for reading and writing data to a file within the local folder. When you work with files, you also typically use the StreamReader class to read and write content to the file.
This topic contains the following sections.
The following methods are typically used when working with StorageFolder:
Creates a directory in the local folder. | |
Asynchronous method creates a file in the local folder. | |
Retrieves a stream for reading a file in the specified folder. | |
Retrieves a stream for writing a file in the specified folder. | |
Deletes a folder. | |
Renames a folder. |
The following image shows a sample app that demonstrates reading and writing text data to the local folder.

To create this UI, in the MainPage.xaml file, replace the Grid named ContentPanel with the following XAML.
<!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0"> <TextBox Name="textBox1" HorizontalAlignment="Left" Height="72" Margin="0,22,0,0" TextWrapping="Wrap" Text="Enter text here." VerticalAlignment="Top" Width="456"/> <Button Name='btnWrite' Content="Write" HorizontalAlignment="Left" Margin="10,94,0,0" VerticalAlignment="Top" Width="156" Click="btnWrite_Click"/> <TextBlock Name="textBlock1" HorizontalAlignment="Left" Margin="10,293,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Height="61" Width="436"/> <Button Name="btnRead" Content="Read" HorizontalAlignment="Left" Margin="10,374,0,0" VerticalAlignment="Top" Width="156" IsEnabled="False" Click="btnRead_Click"/> </Grid>
The following code shows how to create a folder and write to a text file. A file named DataFile.txt and folder named DataFolder are created if either of them don’t already exist. The file and folder are created with the CreateFileAsync and CreateFolderAsync methods. The CreationCollisionOption enumeration is used to specify what to do if the file or folder already exist.
private async void btnWrite_Click(object sender, RoutedEventArgs e) { await WriteToFile(); // Update UI. this.btnWrite.IsEnabled = false; this.btnRead.IsEnabled = true; } private async Task WriteToFile() { // Get the text data from the textbox. byte[] fileBytes = System.Text.Encoding.UTF8.GetBytes(this.textBox1.Text.ToCharArray()); // Get the local folder. StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder; // Create a new folder name DataFolder. var dataFolder = await local.CreateFolderAsync("DataFolder", CreationCollisionOption.OpenIfExists); // Create a new file named DataFile.txt. var file = await dataFolder.CreateFileAsync("DataFile.txt", CreationCollisionOption.ReplaceExisting); // Write the data from the textbox. using (var s = await file.OpenStreamForWriteAsync()) { s.Write(fileBytes, 0, fileBytes.Length); } }
The following code shows how to read the text data.
private async void btnRead_Click(object sender, RoutedEventArgs e) { await ReadFile(); // Update UI. this.btnWrite.IsEnabled = true; this.btnRead.IsEnabled = false; } private async Task ReadFile() { // Get the local folder. StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder; if (local != null) { // Get the DataFolder folder. var dataFolder = await local.GetFolderAsync("DataFolder"); // Get the file. var file = await dataFolder.OpenStreamForReadAsync("DataFile.txt"); // Read the data. using (StreamReader streamReader = new StreamReader(file)) { this.textBlock1.Text = streamReader.ReadToEnd(); } } }