这是我的代码,不言自明。 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;
}
答案 0 :(得分:3)
有一个constructor for StreamWriter,您可以通过bool
指定不关闭基础Stream
:
using (TextWriter writer = new StreamWriter(output, Encoding.UTF8, 1024, true))
{
请注意,您可能还希望在返回之前将MemoryStream
的位置重置为零,具体取决于它的使用方式。
答案 1 :(得分: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的回答看起来更优雅。
答案 2 :(得分:0)
在循环内,在必要时创建新实例...
using (StreamWriter writer = new StreamWriter(@"C:\Users\\Documents\Dev\error.txt", true))
{
writer.WriteLine("cod: " + codERP );
}
Steamwriter自动关闭文件。
尝试(一次)获取文件写入后所需的所有信息(内部)