You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:04:56