Shan
Shan

Reputation: 423

Unable to read file from isolated storage in WP7

My code looks like below:

private void LayoutRoot_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
        // TODO: Add event handler implementation here.
        try
        {
            string fileName = NavigationContext.QueryString["id"];
            DataSaver<SampleData> mypersonaldata = new DataSaver<SampleData>();
            var PersonData = mypersonaldata.LoadMyData(fileName);

            txtName.Text = PersonData.Name;
            txtAge.Text = PersonData.Age;
            txtheight.Text = PersonData.Height;
            txtMammals.Text = PersonData.FavMammals;
            txtBirds.Text = PersonData.FavBirds;
            txtReptiles.Text = PersonData.FavReptiles;
        }
        catch
        {
            MessageBox.Show("Unable to read!");
        }
    }

Here is my code for loading data:

public MyDataType LoadMyData(string sourceName)
{
    MyDataType retVal = default(MyDataType);
    string TargetFileName = String.Format("{0}/{1}.dat", TargetFolderName, sourceName);
    if (IsoFile.FileExists(TargetFileName))
        using (var sourceStream = IsoFile.OpenFile(TargetFileName, FileMode.Open))
        {
            retVal = (MyDataType)_mySerializer.ReadObject(sourceStream);
        }
    return retVal;
}

I am able to access the member of the DataSaver.cs and SampleData.cs. I am getting the correct filename also but unable to read the data. Please help!

    public void SaveMyData(MyDataType sourceData) 
    { 
        string TargetFileName = String.Format("{0}/{1}.dat", TargetFolderName, targetFileName); 

        if (!IsoFile.DirectoryExists(TargetFolderName)) 
            IsoFile.CreateDirectory(TargetFolderName); 

        try 
        { 
            using (var targetFile = IsoFile.CreateFile(TargetFileName)) 
            { 
                _mySerializer.WriteObject(targetFile, sourceData); 
            } 
        } 
        catch (Exception e)
        {
            IsoFile.DeleteFile(TargetFileName); 
        }
    }    

The above code is for saving data into Isolated Storage.

Upvotes: 2

Views: 546

Answers (1)

MAXE
MAXE

Reputation: 5152

These two static methods should help you in any read/write operation from/to WP Isolated Storage.

public static void WriteStreamToFile(MemoryStream stream, string baseFileName, string extension, out string realFileName)
    {
        realFileName = String.Empty;

        if (stream != null)
            using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                baseFileName = GlobalSettings.NormalizeFileName(baseFileName);

                realFileName = String.Concat(baseFileName, extension);

                using (IsolatedStorageFileStream fileStream = appStorage.OpenFile(realFileName, FileMode.Create, FileAccess.Write))
                    stream.WriteTo(fileStream);

            }
    }

    public static void ReadStreamFromFile(MemoryStream stream, string fileName)
    {
        if (stream != null)
            using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
            using (IsolatedStorageFileStream fileStream = appStorage.OpenFile(fileName, FileMode.Open, FileAccess.Read))
                fileStream.CopyTo(stream);
    }

And then, you can serialize everything you want:

public static object DeserializeObject(string fileName, Type objectType)
    {
        using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
        using (IsolatedStorageFileStream fileStream = appStorage.OpenFile(fileName, FileMode.Open, FileAccess.Read))
        using (TextReader xmlReader = new StreamReader(fileStream))
        {
            XmlSerializer xmlSerializer = new XmlSerializer(objectType);

            return xmlSerializer.Deserialize(xmlReader);
        }
    }

    public static void SerializeObject(string fileName, object target, Type objectType)
    {
        using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
        using (IsolatedStorageFileStream fileStream = appStorage.OpenFile(fileName, FileMode.Create, FileAccess.Write))
        using (TextWriter xmlWriter = new StreamWriter(fileStream))
        {
            XmlSerializer xmlSerializer = new XmlSerializer(objectType);

            xmlSerializer.Serialize(xmlWriter, target);
        }
    }

Upvotes: 1

Related Questions