聊天程序写入文本文件

时间:2013-10-20 19:12:26

标签: c#

所以我正在为我和我的朋友制作聊天程序。我在编写消息时遇到问题,当我编写消息时,整个文本文件被新消息替换。这是我的代码:

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        String write = textBox1.Text;
        try
        {
            StreamWriter sw = new StreamWriter(@"Path.txt");
            sw.WriteLine(write);
            sw.Close();
        }
        catch (Exception w)
        {
            Console.WriteLine("Exception: " + w.Message);
        }
        finally
        {
        }
    }

3 个答案:

答案 0 :(得分:1)

不要在try块中执行sw.Close()!如果您的I / O代码抛出异常,您的文件将保持打开状态(并且可能已锁定),直到应用程序结束。

您可以使用using语句更好地处理此类情况。


将字符串附加到文件的代码示例:

using (StreamWriter sw = new StreamWriter(@"Path.txt", true))
{
    sw.WriteLine(write);
}

这是C#的简写:

StreamWriter sw = new StreamWriter(@"Path.txt", true);
try
{
    sw.WriteLine(write);
}
finally
{
    sw.Close();
}

实际上,using的实现方式与 IDisposable 对象一起使用。 (streams实现 IDisposable 接口)。并且using不会在隐式finally块中调用Close()方法,而是调用Dispose()方法。但是,当调用Dispose()方法时,流关闭流(erm ...)。

简而言之,只要您必须控制 IDisposable 对象的生命周期,请尽可能使用using


但回到主题。异常处理...您可以在同一方法中执行I / O异常处理,或者让其中一个调用方法处理异常。

如果方法本身应该处理异常,可以这样做:

try
{
    using (StreamWriter sw = new StreamWriter(@"Path.txt", true))
    {
        sw.WriteLine(write);
    }
}
catch (Exception ex)
{
    // Exception handling here...
}

这样做的好处是在处理实际异常之前已经释放了文件句柄(如果处理不当,可能会抛出异常,具体取决于你在那里做什么)。

答案 1 :(得分:0)

您是否对文本框中的每个文本更改使用此方法? 如果是这样,这将超出您的申请。 我建议您在输入时使用此方法或将此聊天消息发送到单独的线程

答案 2 :(得分:0)

您的想法中存在一些问题:

  1. 我看到你在文本框的TextChanged事件中这样做了。每次输入一个字母或删除一个字母时,您都会将文本框的全部内容写入该文件。 我建议当用户按Enter键或其他键时,只在文件中写入一行文字。

  2. 创建新的StreamWriter会覆盖您的文件。要将文本附加到文件,您可以使用:

    using (StreamWriter sw = File.AppendText(path)) 
    {
        sw.WriteLine();
    }