If you want to implement a file access operation for Windows 8 you have the spoilt of choice: Old style with System.IO.IsolatedStorage or new style with the new WinRT API and classes in the Windows.Storage namespace. The first one will work for Windows Phone 7 and the second one only for Windows Phone 8 but also for a Windows 8 operating system and Metro styled apps.
I tried both solutions and here are the two code fragments which loading a file in a folder and deserialize them to a List of type <T>:
The solution using Isolated Storage:
public static List<T> LoadList<T>(string folderName, string dataName) where T : class
{
var retval = new List<T>();
if (!IsoStore.DirectoryExists(folderName))
{
IsoStore.CreateDirectory(folderName);
}
string fileStreamName = string.Format("{0}\\{1}.dat", folderName, dataName);
using (var stream = new IsolatedStorageFileStream(fileStreamName, FileMode.OpenOrCreate, IsoStore))
{
if (stream.Length > 0)
{
var dcs = new DataContractSerializer(typeof(List<T>));
retval = dcs.ReadObject(stream) as List<T>;
}
}
return retval;
}
And the same with using the new WinRT API and the classes in the Storage namespace:
public static async Task<List<T>> LoadList<T>(string folderName, string dataName) where T : class
{
StorageFolder applicationFolder = ApplicationData.Current.LocalFolder;
if (!await applicationFolder.FolderExistsAsync(folderName))
{
applicationFolder.CreateFolderAsync(dataName);
}
var retval = new List<T>();
string fileStreamName = string.Format("{0}\\{1}.dat", folderName, dataName);
if (await applicationFolder.FileExistsAsync( fileStreamName))
{
IStorageFile storageFile = await applicationFolder.GetFileAsync(fileStreamName);
using (var inStream = await storageFile.OpenSequentialReadAsync())
{
var serializer = new DataContractSerializer(typeof(List<T>));
retval = (List<T>)serializer.ReadObject(inStream.AsStreamForRead());
}
}
return retval;
}
Keine Kommentare:
Kommentar veröffentlichen