• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1097
  • Last Modified:

Silverlight IsolatedFileStorage Delete Directory

Basically, I am caching data while the application is running to improve performance but if the application is reloaded I want the application to cache everything again.  I currently have methods for caching the information to a file, reading it back in, or going to my web service to retrieve the information.  The logic for this code is:

IF cache file exists THEN
     Load Data From Cache
ELSE
     Retrieve data from Web Service
     Cache Data
END IF

With this in mind I thought the perfect way of clearing the cache would be to add code to the Application_Startup event in the App.xaml file to delete everything in the isolated file storage before the application ties to load.  I tried to accomplish with the following code:

    Private Shared Sub ClearDirectory(ByVal Directory As String)
        Dim isoStore As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication
        If isoStore.DirectoryExists(Directory) Then
            isoStore.DeleteDirectory(Directory)
        End If
    End Sub

Open in new window


This code returns:


{System.IO.IsolatedStorage.IsolatedStorageException: Unable to create directory.
   at System.IO.IsolatedStorage.IsolatedStorageFile.DeleteDirectory(String dir)
   at ExecuKeysSL.Helper.FileManager.ClearDirectory(String Directory)
   ...........
}

I am unsure why I am getting an "Unable to create directory" error when I am trying to delete a directory.  I also checked to see what existed in isoStore.GetDirectoryNames:


?isostore.GetDirectoryNames
{Length=1}
    (0): "EKData"

Also note that I am running a test to verify that the directory exists before the line of code to delete the directory is run.

Ok, so I figured I would try to work around this issue with the following code:

    Private Shared Sub ClearDirectory(ByVal Directory As String)
        Dim isoStore As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication
        If isoStore.DirectoryExists(Directory) Then
            Dim files As String() = isoStore.GetFileNames(Directory & "*")
            For Each File In files
                isoStore.DeleteFile(File)
            Next
        End If
    End Sub

Open in new window


The problem with this code is that isoStore.GetFileNames(Directory & "*") doesn't return any files even though they exist.  I even tried to see what was returned if I just asked for all of the files:


?isostore.GetFileNames("*")
{Length=0}

The last thing that I tried was to run isoStore.Remove which ran successfully.  The problem with running isoStore.Remove though is that eventually I am planning on storing additional information here besides cached results.  When I do I will not want this information deleted.

Any help that can be provided in resolving this would be greatly appreciated.
0
kmcbrearty
Asked:
kmcbrearty
1 Solution
 
kmcbreartyAuthor Commented:
Ok, so after I posted this question I was able to get a working solution by modifying the code slightly.  It looks like the method will only return files from within a specified directory.  If you want to get all of the files in a directory you need to complete the path.  The other change to the code was adding the directory to the path when passing it to the deletefile method.  I wasn't sure if this would be included in the file name or not.  I am still curious as to why DeleteDirectory will not work but I have a working solution.
Private Shared Sub ClearDirectory(ByVal Directory As String)
        Dim isoStore As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication
        If isoStore.DirectoryExists(Directory) Then
            Dim files As String() = isoStore.GetFileNames(Directory & "\\*")
            For Each File In files
                isoStore.DeleteFile(Directory & "\\" & File)
            Next
        End If
    End Sub

Open in new window

0
 
MikeTooleCommented:
In the msdn documentation for the IsolatedStorageFile.DeleteDirectory Method :
"A directory must be empty before it is deleted... "

The documentation of the deletefile method at:
    http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile.deletefile.aspx
suggested the attached code to clear a directory.



                Dim fileNames As String() = isoFile.GetFileNames("*")
                ' List the files currently in this Isolated Storage.
                ' The list represents all users who have personal
                ' preferences stored for this application.
                If fileNames.Length > 0 Then
                    For Each name In fileNames
                        ' Delete the files.
                        isoFile.DeleteFile(name)
                    Next name
                    'Confirm no files are left.
                    fileNames = isoFile.GetFileNames("*")
                End If

Open in new window

0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now