2

这是我的代码,不言自明。using块终止后-output正在处理变量。为什么?我想从函数中返回它,处理 StreamWriter 但返回我的对象​​的正确方法是什么?

public static Stream Write(Interchange interchange)
{
    var output = new MemoryStream();
    using (TextWriter writer = new StreamWriter(output))
    {
        foreach (var rawSegment in GetRawSegments(interchange))
        {
            writer.Write(rawSegment.ToString(interchange.ElementDelimeter, interchange.SegmentTerminator));
        }

        writer.Flush();
     }

     return output;
}
4

3 回答 3

3

StreamWriter有一个构造函数,它允许您通过 a 指定bool不关闭底层Stream

using (TextWriter writer = new StreamWriter(output, Encoding.UTF8, 1024, true))
{

请注意,您可能还希望MemoryStream在返回它之前将其位置重置为零,具体取决于它的使用方式。

于 2013-10-01T00:04:22.000 回答
2

StreamWriter 除了要处理的流之外没有非托管资源。调用 TextWriter.Dispose() 会导致关闭底层流。要保持流打开删除using块:

var output = new MemoryStream();
TextWriter writer = new StreamWriter(output);
foreach (var rawSegment in GetRawSegments(interchange))
{
   writer.Write(rawSegment.ToString(interchange.ElementDelimeter, interchange.SegmentTerminator));
}

writer.Flush();

return output;

PS:对于 .NET 4.5 及更高版本,Reed 的答案看起来更优雅。

于 2013-10-01T00:07:26.280 回答
0

在循环内部,在必要时创建新实例......

using (StreamWriter writer = new StreamWriter(@"C:\Users\\Documents\Dev\error.txt", true))
{
    writer.WriteLine("cod: " + codERP );
}

Steamwriter 自动关闭文件。

在写入文件后(一次)尝试获取您需要的所有信息(内部)

于 2018-07-03T13:26:01.027 回答