这是我的代码,不言自明。在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;
}发布于 2013-10-01 00:04:22
有一个StreamWriter构造函数,允许您通过bool指定不关闭底层Stream。
using (TextWriter writer = new StreamWriter(output, Encoding.UTF8, 1024, true))
{请注意,您还可能希望在返回MemoryStream之前将它的位置重置为零,这取决于它的使用方式。
发布于 2013-10-01 00:07:26
除了要处理的流之外,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及以上,里德的答案看起来更优雅。
发布于 2018-07-03 13:26:01
在循环中,创建新实例,必要时.
using (StreamWriter writer = new StreamWriter(@"C:\Users\\Documents\Dev\error.txt", true))
{
writer.WriteLine("cod: " + codERP );
}自动关闭文件。
在你的文件写完(一次)之后,试着获取你需要的所有信息(在里面)。
https://stackoverflow.com/questions/19105829
复制相似问题