聊天程序写入文本文件
本文关键字:文本 文件 程序 聊天 | 更新日期: 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();
}
实际上,它的实现方式using
与 IDisposable 对象一起工作。(流实现 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...
}
这样做的好处是,在处理实际异常之前已经释放了文件句柄(如果操作不当,也可能引发异常,具体取决于您在那里执行的操作)。
是否对文本框上的每个文本更改使用此方法?如果是这样,这将转到您的应用程序。我建议你应该在输入时使用此方法 按下或将此聊天消息发送到单独的线程
你的想法中存在一些问题:
-
我看到您正在文本框的 TextChanged 事件中执行此操作。每次输入或删除字母时,都会将文本框的全部内容写入文件。我建议只在用户按 Enter 或其他键时将一行文本写入文件。
-
创建新的 StreamWriter 会覆盖您的文件。要将文本附加到文件,您可以使用以下内容:
using (StreamWriter sw = File.AppendText(path)){ 西 南部。写线();}