How to: Perform Isolated Storage Tasks

Microsoft Silverlight will reach end of support after October 2021. Learn more.

This example demonstrates the following basic isolated storage tasks:

  • Obtaining an isolated store for an application.

  • Creating a file system of directories and files.

  • Writing to a file and then reading it.

  • Deleting a file.

  • Finding directories.

  • Requesting an increased quota size.

  • Removing the store.

Example

Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Input
Imports System.IO
Imports System.IO.IsolatedStorage
Imports System.Collections
Imports System.Text


Class Example

    Public Shared Sub Demo(ByVal outputBlock As TextBlock)
        ' Obtain an isolated store for an application.
        Try
            Using store As IsolatedStorageFile = _
                IsolatedStorageFile.GetUserStoreForApplication()
                ' Use a StringBuilder to construct output.
                Dim sb As StringBuilder = New StringBuilder

                ' Create three directories in the root.
                store.CreateDirectory("MyApp1")
                store.CreateDirectory("MyApp2")
                store.CreateDirectory("MyApp3")

                ' Create three subdirectories under MyApp1.
                Dim subdirectory1 As String = Path.Combine("MyApp1", "SubDir1")
                Dim subdirectory2 As String = Path.Combine("MyApp1", "SubDir2")
                Dim subdirectory3 As String = Path.Combine("MyApp1", "SubDir3")
                store.CreateDirectory(subdirectory1)
                store.CreateDirectory(subdirectory2)
                store.CreateDirectory(subdirectory3)

                ' Create a file in the root.
                Dim rootFile As IsolatedStorageFileStream = _
                    store.CreateFile("InTheRoot.txt")
                rootFile.Close()


                ' Create a file in a subdirectory.
                Dim subDirFile As IsolatedStorageFileStream = _
                    store.CreateFile(Path.Combine(subdirectory1, "MyApp1A.txt"))
                subDirFile.Close()

                ' Gather file information.
                Dim directoriesInTheRoot() As String = store.GetDirectoryNames

                Dim filesInTheRoot() As String = store.GetFileNames

                Dim searchpath As String = Path.Combine(subdirectory1, "*.*")
                Dim filesInSubDirs() As String = store.GetFileNames(searchpath)

                ' Find subdirectories within the MyApp1
                ' directory using the multi character '*' wildcard.
                Dim subDirectories() As String = _
                    store.GetDirectoryNames(Path.Combine("MyApp1", "*"))

                ' List file infomration

                ' List the directories in the root.
                sb.AppendLine("Directories in root:")
                For Each dir As String In directoriesInTheRoot
                    sb.AppendLine((" - " + dir))
                Next
                sb.AppendLine()
                ' List the subdirectories under MyApp1.
                sb.AppendLine("Directories under MyApp1:")
                For Each sDir As String In subDirectories
                    sb.AppendLine((" - " + sDir))
                Next
                sb.AppendLine()
                ' List files in the root.
                sb.AppendLine("Files in the root:")
                For Each fileName As String In filesInTheRoot
                    sb.AppendLine((" - " + fileName))
                Next
                sb.AppendLine()
                ' List files in MyApp1\SubDir1.
                sb.AppendLine("Files in MyApp1\SubDir1:")
                For Each fileName As String In filesInSubDirs
                    sb.AppendLine((" - " + fileName))
                Next
                sb.AppendLine()

                ' Write to an existing file: MyApp1\SubDir1\MyApp1A.txt

                ' Determine if the file exists before writing to it.
                Dim filePath As String = Path.Combine(subdirectory1, "MyApp1A.txt")

                If store.FileExists(filePath) Then
                    Try
                        Using sw As StreamWriter = _
                            New StreamWriter(store.OpenFile(filePath, FileMode.Open, FileAccess.Write))

                            sw.WriteLine("To do list:")
                            sw.WriteLine("1. Buy supplies.")
                        End Using

                    Catch ex As IsolatedStorageException
                        sb.AppendLine(ex.Message)
                    End Try
                Else
                    sb.AppendLine((filePath + "does not exist"))
                End If

                ' Read the contents of the file: MyApp1\SubDir1\MyApp1A.txt
                Try
                    Using reader As StreamReader = _
                        New StreamReader(store.OpenFile(filePath, FileMode.Open, FileAccess.Read))
                        Dim contents As String = reader.ReadToEnd
                        sb.AppendLine(filePath + " contents:")
                        sb.AppendLine(contents)
                    End Using
                Catch ex As IsolatedStorageException
                    sb.Append(ex.Message)
                End Try


                ' Delete a file.
                Try
                    If store.FileExists(filePath) Then
                        store.DeleteFile(filePath)
                    End If
                Catch ex As IsolatedStorageException
                    sb.AppendLine(ex.Message)
                End Try

                ' Delete a specific directory.
                Dim dirDelete As String = Path.Combine("MyApp1", "SubDir3")
                Try
                    If store.DirectoryExists(dirDelete) Then
                        store.DeleteDirectory(dirDelete)
                    End If
                Catch ex As IsolatedStorageException
                    sb.AppendLine(ex.Message)
                End Try

                sb.AppendLine()
                ' remove the store
                store.Remove()

                sb.AppendLine("Store removed.")
                outputBlock.Text = sb.ToString()
            End Using
        Catch Ex As IsolatedStorageException
            ' TODO: Handle that store was unable to be accessed.
        End Try
    End Sub
End Class

' Quota status in increase examples
Class StoreQuota

    ' Assumes an event handler for the MouseLeftbuttonUp
    ' event is defined for a control named 'IncreaseQuota'
    ' In the control's XAML: MouseLeftButtonUp="IncreaseQuota_OnLeftMouseButtonUp"
    Public Sub IncreaseQuota_OnClick(ByVal sender As Object, ByVal e As MouseEventArgs)
        ' Obtain an isolated store for an application.
        Try
            Using store As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication()
                ' Request 5MB more space in bytes.
                Dim spaceToAdd As Int64 = 5242880
                Dim curAvail As Int64 = store.AvailableFreeSpace
                ' If available space is less than
                ' what is requested, try to increase.
                If (curAvail < spaceToAdd) Then
                    ' Request more quota space.
                    If Not store.IncreaseQuotaTo((store.Quota + spaceToAdd)) Then
                        ' The user clicked NO to the
                        ' host's prompt to approve the quota increase.
                    Else
                        ' The user clicked YES to the
                        ' host's prompt to approve the quota increase.
                    End If
                End If
            End Using
        Catch Ex As IsolatedStorageException

            ' TODO: Handle that store could not be accessed.
        End Try
    End Sub




    Public Shared Sub ShowIsoStoreStatus(ByVal inputBlock As TextBlock)
        ' Obtain an isolated store for an application.
        Try
            Using store As IsolatedStorageFile = _
              IsolatedStorageFile.GetUserStoreForApplication()
                Dim spaceUsed As String = (store.Quota - store.AvailableFreeSpace).ToString
                Dim spaceAvailable As String = store.AvailableFreeSpace.ToString
                Dim curQuota As String = store.Quota.ToString
                inputBlock.Text = String.Format("Quota: {0} bytes, Used: {1} bytes, Available: {2} bytes", _
                                         curQuota, spaceUsed, spaceAvailable)
            End Using
        Catch Ex As IsolatedStorageException
            inputBlock.Text = "Unable to access store."
        End Try
    End Sub
End Class

' This example's Example.Demo method 
' produces the following output:
' -----
' Directories in root:
' - MyApp1
' - MyApp2
' - MyApp3

' Directories under MyApp1:
' - SubDir1
' - SubDir2
' - SubDir3

' Files in the root:
' - InTheRoot.txt

' Files in MyApp1\SubDir1:
' - MyApp1A.txt

' MyApp1\SubDir1\MyApp1A.txt contents:
' To do list:
' 1. Buy supplies.

' Store removed.
' -----

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.IO;
using System.IO.IsolatedStorage;
using System.Collections;
using System.Text;

class Example
{
    public static void Demo(TextBlock outputBlock)
    {
        // Obtain an isolated store for an application.
        try
        {
            using (var store = IsolatedStorageFile.GetUserStoreForApplication())
            {
                // Use a StringBuilder to construct output.
                StringBuilder sb = new StringBuilder();

                // Create three directories in the root.
                store.CreateDirectory("MyApp1");
                store.CreateDirectory("MyApp2");
                store.CreateDirectory("MyApp3");

                // Create three subdirectories under MyApp1.
                string subdirectory1 = Path.Combine("MyApp1", "SubDir1");
                string subdirectory2 = Path.Combine("MyApp1", "SubDir2");
                string subdirectory3 = Path.Combine("MyApp1", "SubDir3");
                store.CreateDirectory(subdirectory1);
                store.CreateDirectory(subdirectory2);
                store.CreateDirectory(subdirectory3);

                // Create a file in the root.
                IsolatedStorageFileStream rootFile = store.CreateFile("InTheRoot.txt");
                rootFile.Close();

                // Create a file in a subdirectory.
                IsolatedStorageFileStream subDirFile =
                    store.CreateFile(Path.Combine(subdirectory1, "MyApp1A.txt"));
                subDirFile.Close();

                // Gather file information
                string[] directoriesInTheRoot = store.GetDirectoryNames();

                string[] filesInTheRoot = store.GetFileNames();

                string searchpath = Path.Combine(subdirectory1, "*.*");
                string[] filesInSubDirs = store.GetFileNames(searchpath);

                // Find subdirectories within the MyApp1
                // directory using the multi character '*' wildcard.
                string[] subDirectories =
                    store.GetDirectoryNames(Path.Combine("MyApp1", "*"));

                // List file information

                // List the directories in the root.
                sb.AppendLine("Directories in root:");
                foreach (string dir in directoriesInTheRoot)
                {
                    sb.AppendLine(" - " + dir);
                }
                sb.AppendLine();

                // List the subdirectories under MyApp1.
                sb.AppendLine("Directories under MyApp1:");
                foreach (string sDir in subDirectories)
                {
                    sb.AppendLine(" - " + sDir);
                }
                sb.AppendLine();

                // List files in the root.
                sb.AppendLine("Files in the root:");
                foreach (string fileName in filesInTheRoot)
                {
                    sb.AppendLine(" - " + fileName);
                }
                sb.AppendLine();

                // List files in MyApp1\SubDir1.
                sb.AppendLine(@"Files in MyApp1\SubDir1:");
                foreach (string fileName in filesInSubDirs)
                {
                    sb.AppendLine(" - " + fileName);
                }
                sb.AppendLine();

                // Write to an existing file: MyApp1\SubDir1\MyApp1A.txt

                // Determine if the file exists before writing to it.
                string filePath = Path.Combine(subdirectory1, "MyApp1A.txt");

                if (store.FileExists(filePath))
                {
                    try
                    {
                        using (StreamWriter sw =
                            new StreamWriter(store.OpenFile(filePath,
                                FileMode.Open, FileAccess.Write)))
                        {
                            sw.WriteLine("To do list:");
                            sw.WriteLine("1. Buy supplies.");
                        }
                    }
                    catch (IsolatedStorageException ex)
                    {

                        sb.AppendLine(ex.Message);
                    }
                }

                // Read the contents of the file: MyApp1\SubDir1\MyApp1A.txt
                try
                {
                    using (StreamReader reader =
                        new StreamReader(store.OpenFile(filePath,
                            FileMode.Open, FileAccess.Read)))
                    {
                        string contents = reader.ReadToEnd();
                        sb.AppendLine(filePath + " contents:");
                        sb.AppendLine(contents);
                    }
                }
                catch (IsolatedStorageException ex)
                {

                    sb.AppendLine(ex.Message);
                }

                // Delete a file.
                try
                {
                    if (store.FileExists(filePath))
                    {
                        store.DeleteFile(filePath);
                    }
                }
                catch (IsolatedStorageException ex)
                {
                    sb.AppendLine(ex.Message);
                }

                // Delete a specific directory.
                string dirDelete = Path.Combine("MyApp1", "SubDir3");
                try
                {
                    if (store.DirectoryExists(dirDelete))
                    {
                        store.DeleteDirectory(dirDelete);
                    }
                }
                catch (IsolatedStorageException ex)
                {
                    sb.AppendLine(ex.Message);
                }


                sb.AppendLine();


                // remove the store
                store.Remove();

                sb.AppendLine("Store removed.");

                outputBlock.Text = sb.ToString();
            }
        }
        catch (IsolatedStorageException)
        {
            // TODO: Handle that store was unable to be accessed.

        }
    }
}

// Quota status and increase quota examples
class StoreQuota
{

    // Assumes an event handler for the MouseLeftbuttonUp
    // event is defined for a control named 'IncreaseQuota'
    // In the control's XAML: MouseLeftButtonUp="IncreaseQuota_OnLeftMouseButtonUp"

    // User first selects UI to increase the quota.
    public void IncreaseQuota_OnClick(object sender, MouseEventArgs e)
    {

        // Obtain an isolated store for an application.
        try
        {
            using (var store = IsolatedStorageFile.GetUserStoreForApplication())
            {
                // Request 5MB more space in bytes.
                Int64 spaceToAdd = 5242880;
                Int64 curAvail = store.AvailableFreeSpace;

                // If available space is less than
                // what is requested, try to increase.
                if (curAvail < spaceToAdd)
                {

                    // Request more quota space.
                    if (!store.IncreaseQuotaTo(store.Quota + spaceToAdd))
                    {
                        // The user clicked NO to the
                        // host's prompt to approve the quota increase.
                    }
                    else
                    {
                        // The user clicked YES to the
                        // host's prompt to approve the quota increase.
                    }
                }
            }
        }

        catch (IsolatedStorageException)
        {
            // TODO: Handle that store could not be accessed.

        }
    }

    public static void ShowIsoStoreStatus(TextBlock inputBlock)
    {

        // Obtain an isolated store for an application.
        try
        {
            using (var store = IsolatedStorageFile.GetUserStoreForApplication())
            {
                string spaceUsed = (store.Quota - store.AvailableFreeSpace).ToString();
                string spaceAvailable = store.AvailableFreeSpace.ToString();
                string curQuota = store.Quota.ToString();
                inputBlock.Text =
                    String.Format("Quota: {0} bytes, Used: {1} bytes, Available: {2} bytes",
                            curQuota, spaceUsed, spaceAvailable);
            }
        }

        catch (IsolatedStorageException)
        {
            inputBlock.Text = "Unable to access store.";

        }
    }

}
// This example's Example.Demo method
// produces the following output:
// -----
// Directories in root:
// - MyApp1
// - MyApp2
// - MyApp3

// Directories under MyApp1:
// - SubDir1
// - SubDir2
// - SubDir3

// Files in the root:
// - InTheRoot.txt

// Files in MyApp1\SubDir1:
// - MyApp1A.txt

// MyApp1\SubDir1\MyApp1A.txt contents:
// To do list:
// 1. Buy supplies.

// Store removed.
// -----