C#中不调用Flush()如何读取刚写入的流内容?
解决方案:移除过时的Flush()并调整流操作时机
问题出在你过早重置了流的位置——在X12Writer还未完成所有写入操作时就去读取流。EDIFabric的X12Writer会在其Dispose方法(由外层using块自动触发)中自动完成缓冲区的刷新和写入操作,完全不需要手动调用已过时的Flush()。
只需要将流的重置操作移到X12Writer的using块外部,确保writer先完成所有写入并释放资源后,再去读取流即可:
// Build out the memory stream we'll use to convert to a string. using (var stream = new MemoryStream()) { using (var writer = new X12Writer(stream)) { writer.Write("Write EDI values to the stream"); // 替换为合法的EDI输出 // 移除过时的Flush()调用 } // 等writer被Dispose后,再重置流到起始位置 stream.Seek(0, SeekOrigin.Begin); using StreamReader reader = new(stream); return reader.ReadToEnd(); // 现在能正确读取到内容 }
关键说明
X12Writer的using块结束时会自动调用Dispose(),这个过程中会把内部缓冲区的所有数据写入到底层的MemoryStream,相当于自动完成了Flush的效果。- 之前的代码在writer的using块内就调用
stream.Seek(0, ...),此时writer的缓冲区数据还没写入流,所以读取到空内容。调整位置后,流里已经包含了所有写入的数据。
内容的提问来源于stack exchange,提问作者amber
相关产品推荐
相关产品推荐

