You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Forms C#实现文件非覆盖保存,避免原有数据被删除

解决Windows Forms保存用户名密码不被清空的问题

问题根源

你的代码存在三个核心问题导致已有数据被清空:

  1. StreamWriter默认覆盖文件:实例化StreamWriter时,默认会直接清空目标文件内容,哪怕后续没有写入操作,文件也已经被清空。
  2. 局部变量count无效:count是按钮点击方法内的局部变量,每次点击都会重置为0,重启程序后完全失效,无法控制写入次数。
  3. 判断逻辑时机错误:在创建StreamWriter之后才判断文件长度,此时文件已经被清空,导致判断条件永远为真,每次点击都会重新写入覆盖旧数据。

修正后的代码

private void btn1_Click(object sender, EventArgs e)
{
    // 提取文件路径为变量,提升可读性
    string nameFilePath = @"C:\Users\skerd\AppData\Local\Temp\jvvhbbcp..txt";
    string passwordFilePath = @"C:\Users\skerd\AppData\Local\Temp\x1pu0bds..txt";

    // 先判断两个文件是否为空(或不存在)
    bool isNameFileEmpty = !File.Exists(nameFilePath) || new FileInfo(nameFilePath).Length == 0;
    bool isPasswordFileEmpty = !File.Exists(passwordFilePath) || new FileInfo(passwordFilePath).Length == 0;

    if (isNameFileEmpty && isPasswordFileEmpty)
    {
        // 使用using语句自动管理文件流,无需手动调用Close
        using (TextWriter nameWriter = new StreamWriter(nameFilePath, false))
        {
            nameWriter.Write(txtB_1.Text);
        }

        using (TextWriter passwordWriter = new StreamWriter(passwordFilePath, false))
        {
            passwordWriter.Write(txtB_2.Text);
        }

        Close();
    }
}

关键修改说明

  • 提前判断文件状态:将文件存在性和长度检查放在创建StreamWriter之前,避免提前清空文件。
  • 使用using语句:自动处理文件流的关闭与资源释放,比手动调用Close更可靠,能避免异常导致的文件未关闭问题。
  • 移除无效变量:删除了无法实现控制逻辑的局部变量count,简化代码。

如果需要支持后续修改用户名密码(而非仅首次写入),只需移除文件为空的判断,直接写入即可,但此时仍要注意StreamWriter的模式,默认的false参数会覆盖原有内容,若需追加则改为true。

内容的提问来源于stack exchange,提问作者Skerdi Velo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:21:16