StreamWriter只写第一行

时间:2012-01-17 22:27:05

标签: c# streamwriter

我有一个使用此方法的C#.NET 3.5 Windows窗体程序:

    private void toLog(string sLog)
    {
        richTextBox1.Text += DateTime.Now.ToString("T") + ": " + sLog + "\n";
        richTextBox1.Update();
        richTextBox1.Refresh();
        using (StreamWriter writer = new StreamWriter("log.txt", true))
        {
            writer.WriteLine(DateTime.Now.ToString("T") + ": " + sLog);
            writer.Flush();
            writer.Dispose();
        }

    }

我的想法是我可以用它提交日志条目,它会将条目写入richtextbox和日志文件。

这就是...编写器只在第一次调用方法时写入! richtextbox更新很棒。 Flush()和Dispose()是我在绝望中尝试过的东西,但我想使用块应该处理它。

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:4)

我认为问题可能出在StreamWriter("log.txt",:您的应用内可以更改路径,因此您最好在此处使用完整路径。
例如:

string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string log = Path.Combine(dir, "log.txt");
using (StreamWriter writer = new StreamWriter(log, true))

答案 1 :(得分:1)

我知道我迟到了,但这对我有类似的情况帮助我,也许它会帮助别人。

我遇到了同样的问题,即流写器只写了文件中的第一行而没有别的。我能够通过使用FileStream修复它:

using (FileStream fileStream = File.Open("log.txt", FileMode.Open))
{
    using (StreamWriter streamWriter= new StreamWriter(fileStream))
    { 
        writer.WriteLine(DateTime.Now.ToString("T") + ": " + sLog);
    }
}

答案 2 :(得分:0)

您可以使用以下示例:

using (StreamWriter writer = File.AppendText("log.txt")) 
{
    writer.WriteLine(DateTime.Now.ToString("T") + ": " + sLog);
}   

在使用区块的末尾不需要使用Flush和Dispose,因为这将是隐含的。