我有以下代码使用StreamWriter写入MemoryStream。但是,当我尝试读回流时,我得到了被截断的数据:

using(var outStream = new MemoryStream())
using (var outWriter = new StreamWriter(outStream))
{
    // my operation that's writing data to the stream

    var outReader = new StreamReader(outStream);
    outStream.Flush();
    outStream.Position = 0;
    return outReader.ReadToEnd();

}

这将返回大多数数据,但会在结尾处截断。但是,我知道数据正在流中,因为如果我尝试写入文件而不是MemoryStream,则会得到全部内容。例如,此代码将全部内容写入文件:
using (var outWriter = new StreamWriter(@"C:\temp\test.out"))
{
    // my operation that's writing data to the stream
}

最佳答案

您不是要冲洗书写器-冲洗outStream是没有意义的,因为没有冲洗对象。你应该有:

outWriter.Flush();

倒带之前。您后面的代码证明数据到达了编写器,而不是流。

另外,只需从一开始就使用StringWriter ...这是创建TextWriter并随后将文本写入其中的简单得多的方法。

09-30 20:22