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