c# - 使用 TextWriter 时如何截断流

标签 c# .net stream

这段代码应该是相当不言自明的:

XDocument xd = ....
using (FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.ReadWrite))
{
  using (TextWriter tw = new StreamWriter(fs))
  {
    xd.Save(tw);
  }
  fs.Flush();
  fs.SetLength(fs.Position);
}

我想使用 TextWriter 将我的 XDocument 序列化为流,然后在流结束后截断该流。不幸的是,Save() 操作似乎关闭了流,因此我的 Flush() 调用生成了异常。

在现实世界中,我实际上并不是序列化到文件,而是序列化到我无法控制的其他类型的流,因此这并不像先删除文件那么简单。

最佳答案

如果你想刷新流,你需要这样做

using (FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.ReadWrite))
{
  using (TextWriter tw = new StreamWriter(fs))
  {
    tw.Flush();
    xd.Save(tw);
    fs.SetLength(fs.Position);
  }
}

关于c# - 使用 TextWriter 时如何截断流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14629429/

相关文章:

c# - 将整数传递给 VSTO 2010 Word 插件

c# - 如何捕获 WPF FrameworkElement 上的单击和双击事件?

c# - 我应该使用什么来访问性能敏感的数据?

Java缓冲区和流: Releasing underlying resources

c++ - cout uint8_t 作为整数而不是字符

c# - 在 WriteableBitmap 上绘制文本

c# - Emgu OpenCV .Net 包装器中的 TColor 在哪里定义?

.net - 使用 WebDeploy (MSDeploy) 部署到 Microsoft Azure 网站目标不起作用

c# - linq中的关键字是什么?

stream - Dart同时路由到多个客户端