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

Windows Form C#:文本框修改密码无法更新CSV文件数组问题

问题分析与修复方案

核心问题点

  • 文件访问权限错误:你用FileAccess.Read打开文件,仅能读取内容,完全无法写入修改。
  • 未将修改同步到文件:你只修改了内存中的fields数组,但没有把更新后的行内容写回文件,程序结束后内存数据销毁,文件自然无变化。
  • 逻辑错误:每次循环遇到不匹配的行就弹出错误提示,会导致第一行不匹配时直接弹框,后续行根本不会被检查;正确逻辑应该是遍历完所有行都没找到匹配项时再提示错误。

修复后的代码

string filename = "./userinfo.csv";
// 读取所有行到内存(包含表头)
var allLines = File.ReadAllLines(filename).ToList();
bool isUpdated = false;

// 从第二行开始遍历,跳过表头
for (int i = 1; i < allLines.Count; i++)
{
    string[] fields = allLines[i].Split(',');
    if (fields[1] == email && fields[3] == txtPin.Text)
    {
        // 修改密码字段
        fields[2] = txtNewPassword.Text;
        // 将修改后的数组重新拼接为CSV行格式
        allLines[i] = string.Join(",", fields);
        MessageBox.Show("Password Changed");
        isUpdated = true;
        break;
    }
}

// 遍历完所有行未找到匹配项时,提示错误
if (!isUpdated)
{
    MessageBox.Show("Please enter a valid Email or Pin");
}

// 将修改后的所有内容写回文件
File.WriteAllLines(filename, allLines);

代码说明

  1. 用File.ReadAllLines一次性读取所有行到内存列表,方便修改特定行内容。
  2. 从索引1开始遍历,跳过第一行的表头(和你原代码中先读表头的逻辑对应)。
  3. 修改匹配行后,用string.Join将数组重新拼接为CSV格式的行,更新列表中的对应元素。
  4. 遍历结束后,通过File.WriteAllLines把整个列表写回文件,完成持久化修改。
  5. 仅在遍历完所有行都未找到匹配项时弹出错误提示,避免中途误触发提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:25:17