【问题标题】:StreamWriter truncating text while writing to a text fileStreamWriter 在写入文本文件时截断文本
【发布时间】:2021-12-02 19:00:21
【问题描述】:

我在字符串变量中有大量内容,我想使用流写入器将该内容写入文本文件。但是流编写器正在截断文本,而不是将整个内容写入文件。为什么?

using (StreamWriter sw = new StreamWriter(completeFilePath))
{
    sw.Write(txt);
}

【问题讨论】:

  • 您分配给html 的代码在哪里?它是否总是截断到相同的最大长度?
  • 你是在using语句结束前检查吗?因为 using 语句在超出作用域时会隐式调用 Dispose(),它会自动调用 Flush()。

标签: c# asp.net


【解决方案1】:

Write 后,使用 Flush 方法清空缓冲区。

sw.Write(Html);
sw.Flush();

【讨论】:

  • 这解决了我的问题。我试图完成类似的任务。在某些情况下,正在编写的 html 被截断,而在其他情况下根本没有写入任何内容。让我想知道Flush() 到底在做什么来解决这个问题。
  • @Adeel 这是我的问题,缓冲区大约为 2 或 4kb,因此它实际上可以将整个文本文件保存在内存中并且永远不会将其写出。我正在拔头发,试图弄清楚琴弦的不同之处。
【解决方案2】:

假设txt 是一个包含HTML 的字符串变量,请尝试在sw.Write() 之后调用sw.Flush()。这应该强制流编写器将字符串的其余部分写入文件。如果文件仍被截断,请确保 txt 字符串包含预期的完整输出。

【讨论】:

  • Dispose 中没有流式刷新吗?
  • @lazyberezovsky 应该但是在没有任何其他代码(例如创建 Html 的代码)的情况下,这将明确排除问题。
【解决方案3】:

你为什么不使用

File.WriteAllText(completeFilePath, txt);

MSDN Documentation for File.WriteAllText

【讨论】:

    【解决方案4】:

    如果尺寸太大,

        using (StreamWriter sw = new StreamWriter(completeFilePath))
    {
        sw.Write(txt);
        //just to make sure the stream writer flushes the command
        sw.Flush();
    }
    

    如果大小不是很大,我建议使用 File.WriteAllText 方法

    //no need to Open or Close anything
    File.WriteAllText(Path, txt);
    

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 2014-11-20
      • 1970-01-01
      • 2012-01-17
      • 2021-12-09
      相关资源
      最近更新 更多