聊天程序写入文本文件

本文关键字:文本 文件 程序 聊天 | 更新日期: 2023-09-27 18:36:13

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

        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
        {
        }
    }

聊天程序写入文本文件

不要做 sw。关闭() 在尝试块中!如果 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();
}

实际上,它的实现方式usingIDisposable 对象一起工作。(流实现 IDisposable 接口)。using 不会在隐式 final-block 中调用 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. 我看到您正在文本框的 TextChanged 事件中执行此操作。每次输入或删除字母时,都会将文本框的全部内容写入文件。我建议只在用户按 Enter 或其他键时将一行文本写入文件。

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

    using (StreamWriter sw = File.AppendText(path)){    西 南部。写线();}