How to properly read and write a file using Windows.Storage on Windows Phone 8
c#, file-io, windows-phone-8, windows-runtime
Solution
Here's a simple example:
public async Task WriteDataToFileAsync(string fileName, string content)
{
byte[] data = Encoding.Unicode.GetBytes(content);
var folder = ApplicationData.Current.LocalFolder;
var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
using (var s = await file.OpenStreamForWriteAsync())
{
await s.WriteAsync(data, 0, data.Length);
}
}
public async Task<string> ReadFileContentsAsync(string fileName)
{
var folder = ApplicationData.Current.LocalFolder;
try
{
var file = await folder.OpenStreamForReadAsync(fileName);
using (var streamReader = new StreamReader(file))
{
return streamReader.ReadToEnd();
}
}
catch (Exception)
{
return string.Empty;
}
}
use them like this:
await this.WriteDataToFileAsync("afile.txt", "some text to save in a file");
var contents = await this.ReadFileContentsAsync("afile.txt");
Problem
I'm needing to just simply write to a file and read from a file in Windows Phone 8 using the Windows.Storage APIs. This is relatively easy using the old IsolatedStorage method, but it's proving significantly harder using the new WinRT API. I've been trying to write it, but there seem to be all these weird things like IBuffer. and such. Using the full version of WinRT, it's quite easy using Windows.Storage.FileIO which appears to exist to keep developers like me from going insane. However, it's not implemented in the Phone version. Also, I watched a Channel9 video which showed some code samples, but they had a mistake in that they used methods marked Security Critical to get regular streams. Apparently getting a regular Stream just isn't allowed. So, can someone provide me with a concise and correct snippet on how to just read a file into a string and how to write a string to a file, complete with proper using and disposal techniques?