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

如何在C#中查找并覆盖.sii文件中的指定行?

C# 实现查找并覆盖.sii文件指定行的正确方式

原代码的问题

你的代码存在两个核心问题:

  • 覆盖整个文件:找到匹配行后立刻调用File.WriteAllText,会把文件内容全部替换成当前处理的那一行,导致其他所有行丢失。
  • 重复写入风险:如果文件中有多行匹配,每次匹配都会执行写入操作,最终文件只会保留最后一次匹配行的处理结果。

正确实现思路

要保留文件中其他行的同时只修改目标行,正确流程是:

  1. 读取文件所有行到内存
  2. 遍历每一行,对符合条件的行执行替换,其余行保持原样
  3. 将处理后的所有行整体写回文件

代码示例

string filePath = "你的文件路径";
// 读取所有行(如果文件有特殊编码,可指定Encoding参数,比如Encoding.GetEncoding("ISO-8859-1"))
var lines = File.ReadAllLines(filePath);

// 遍历处理每一行,构建新的行集合
var updatedLines = lines.Select(line => 
{
    if (line.Contains("my_truck_placement: ("))
    {
        // 替换目标内容,返回修改后的行
        return line.Replace("my_truck_placement: ", "").Trim();
    }
    // 不匹配的行直接返回原内容
    return line;
}).ToArray();

// 将处理后的所有行写回文件
File.WriteAllLines(filePath, updatedLines);

额外注意事项

  • 如果.sii文件使用非默认编码(比如西欧编码),需要在ReadAllLines和WriteAllLines中指定对应的Encoding参数,避免乱码。
  • 如果需要更精确的匹配(比如避免部分匹配),可以用正则表达式代替Contains,示例:
    using System.Text.RegularExpressions;
    // ...
    if (Regex.IsMatch(line, @"^my_truck_placement: \(.*\)$"))
    {
        // 执行替换逻辑
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:25:21