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

C# WinForm:点击按钮复制文本文件指定行的实现方案

实现WinForm中复制文本文件指定行的功能

以下是完善后的duplicateLine方法逻辑,包含文件读取、指定行复制及写入的完整实现:

void duplicateLine(string filePath, int lineNumber)
{
    // 读取文件所有行到字符串数组
    string[] lines = File.ReadAllLines(filePath);
    
    // 验证行号有效性(此处默认行号从1开始计数)
    if (lineNumber < 1 || lineNumber > lines.Length)
    {
        throw new ArgumentException("指定行号超出文件范围,请检查输入");
    }
    
    // 转换为List以方便插入操作
    List<string> lineList = new List<string>(lines);
    
    // 获取目标行内容,在原行的下一个位置插入副本
    string targetContent = lines[lineNumber - 1];
    lineList.Insert(lineNumber, targetContent);
    
    // 将修改后的内容写回原文件
    File.WriteAllLines(filePath, lineList);
}

关键逻辑说明

  • 文件读取:使用File.ReadAllLines一次性读取文件所有行,返回字符串数组,每一个元素对应文件的一行内容。
  • 行号验证:避免传入无效行号导致索引越界,此处假设调用方传入的lineNumber是从1开始的行号(如第一行传1),若你的业务逻辑是从0开始,需将索引计算调整为lineNumber而非lineNumber - 1。
  • 插入副本:将数组转为List<string>,利用Insert方法在目标行的下一个位置插入副本,保证原行顺序不变,副本紧跟其后。
  • 文件写入:使用File.WriteAllLines将修改后的列表覆盖写入原文件,完成更新。

WinForm按钮调用示例

在按钮的点击事件中调用该方法,并添加异常处理提升用户体验:

private void btnDuplicate_Click(object sender, EventArgs e)
{
    try
    {
        // 可替换为实际文件路径,或通过OpenFileDialog让用户选择文件
        string targetFile = @"D:\example.txt";
        // 复制第1行
        duplicateLine(targetFile, 1);
        MessageBox.Show("行复制完成!");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"操作失败:{ex.Message}");
    }
}

注意事项

  • 确保应用程序对目标文件拥有读/写权限,避免因权限不足抛出UnauthorizedAccessException。
  • 若处理大文件,File.ReadAllLines会一次性将所有内容加载到内存,此时建议改用流读取的方式优化内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:20:18