Question

I'm trying to create a resx file and write it to a stream so that I might return it as a string instead of immediately saving it to a file. However, when I try to read that stream, it is empty. What am I doing wrong here? i did verify that the entries are not null. I can actually use the ResXResourceWriter constructor that saves it to disk successfully, but I'm trying to avoid using temp files. Also, I can see the stream is 0k before the loop and about 8k in length after the loop.

using (var stream = new MemoryStream())
{
    using (var resx = new ResXResourceWriter(stream))
    {
        // build the resx and write to memory
        foreach (var entry in InputFile.Entries.Values)
        {
            resx.AddResource(new ResXDataNode(entry.Key, entry.Value) { Comment = entry.Comment });
        }

        var reader = new StreamReader(stream);
        var text = reader.ReadToEnd(); // text is an empty string here!

        return null;
    }
}
Was it helpful?

Solution

You need to flush and reset the output/stream before trying to read it. This should work, using Generate and Position:

resx.Generate();
stream.Position = 0;
var reader = new StreamReader(stream);
var text = reader.ReadToEnd();
return text;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top