How write a file using StreamWriter in Windows 8?

c#, windows-8, windows-runtime

Solution

Instead of StreamWriter you would use something like this:

StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.CreateFileAsync();

using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
    using (IOutputStream outputStream = fileStream.GetOutputStreamAt(0))
    {
        using (DataWriter dataWriter = new DataWriter(outputStream))
        {
            //TODO: Replace "Bytes" with the type you want to write.
            dataWriter.WriteBytes(bytes);
            await dataWriter.StoreAsync();
            dataWriter.DetachStream();
        }

        await outputStream.FlushAsync();
    }
}

You can look at the StringIOExtensions class in the WinRTXamlToolkit library for sample use.

EDIT*

While all the above should work - they were written before the `FileIO` class became available in WinRT, which simplifies most of the common scenarios that the above solution solves since you can now just call `await FileIO.WriteTextAsync(file, contents)` to write text into file and there are also similar methods to read, write or append strings, bytes, lists of strings or `IBuffers`.

Problem

I'm having trouble when creating a `StreamWriter` object in windows-8, usually I just create an instance just passing a string as a parameter, but in Windows 8 I get an error that indicates that it should recieve a Stream, but I noticed that Stream is an abstract class, Does anybody knows how will be the code to write an xml file?, BTW I'm using .xml because I want to save the serialized object, or does anyone knows how to save to a file a serialized object in Windows 8?. Any ideas? Currently using Windows 8 Consumer Preview Code: `StreamWriter sw = new StreamWriter("person.xml");` Error: `The best overloaded method match for 'System.IO.StreamWriter.StreamWriter(System.IO.Stream)' has some invalid arguments`

Original source