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

C#读取文本文件时为何两行字符串会被合并?

问题:读取远程TXT文件时部分行被合并

时隔许久重新接触C#,遇到一个问题——从网站读取.txt文件(strRunnerTXTFile)内容到变量后,原文件中单独成行的"""Brand\\Runner 2 Front"""和198mm被合并成了一行。

原文件内容

"""BrandName"""
No
"""Brand\\Runner 1 Front"""
150mm
"""Brand\\Runner 2 Front"""
198mm
"""Brand\\Runner 3 Front"""
230mm
"""Brand\\Runner 4 Front"""

读取后变量内容

"""BrandName"""
No
"""Brand\\Runner 1 Front"""
150mm
"""Brand\\Runner 2 Front"""198mm
"""Brand\\Runner 3 Front"""
230mm
"""Brand\\Runner 4 Front"""

读取文件代码

WebClient wc = new WebClient();  // create object to use to access web data
byte[] raw = wc.DownloadData(strRunnerTXTFile);  // read data text file into variable
if (raw.Length == 0) { ExitWithError("Could not source data from server, or data file is empty.", 5); }
string webData = System.Text.Encoding.UTF8.GetString(raw);  // convert into usable format

string[] strTXTInput = webData.Split('\n');   // split array into indexes by new line separation
sRunnerSetName = strTXTInput[0].Replace("\"","");
    for (x = 0; x < strTXTInput.Length-1; x++)
    {
        switch (x)
        {
            case 0:
                sRunnerSetName = strTXTInput[x];
                break;
            case 1:
                sFH = strTXTInput[x];
                break;
            case 2:
                sR1 = strTXTInput[x];
                break;
            case 3:
                sH2 = strTXTInput[x];
                break;
            case 4:
                sR2 = strTXTInput[x];
                break;
            case 5:
                sH3 = strTXTInput[x];
                break;
            case 6:
                sR3 = strTXTInput[x];
                break;
            case 7:
                sH4 = strTXTInput[x];
                break;
            case 8:
                sR4 = strTXTInput[x];
                break;
            case 9:
                sH5 = strTXTInput[x];
                break;
            case 10:
                sR5 = strTXTInput[x];
                break;
            default:
                break;
        }
    }

createOutputString(RunnerSetFile);

后续排序代码

public static void createOutputString(string RunnerSetFile)
{
    List<Item> list = new List<Item>
    {
        new Item { Description = sRunnerSetName, SortOrder = iRunnerSetName },
        new Item { Description = sFH, SortOrder = iFH },
        new Item { Description = sR1, SortOrder = iR1 },
        new Item { Description = sH2, SortOrder = iH2 },
        new Item { Description = sR2, SortOrder = iR2 },
        new Item { Description = sH3, SortOrder = iH3 },
        new Item { Description = sR3, SortOrder = iR3 },
        new Item { Description = sH4, SortOrder = iH4 },
        new Item { Description = sR4, SortOrder = iR4 },
        new Item { Description = sH5, SortOrder = iH5 },
        new Item { Description = sR5, SortOrder = iR5 }
    };

    list = list.OrderBy(x => x.SortOrder).ToList();
}

问题分析与解决方案

排序环节不会造成行合并——合并现象在读取后的webData变量中已经出现,和排序无关。

问题根源在于换行符处理不全面:你仅用Split('\n')拆分内容,但不同操作系统/服务器的换行符格式不同(Windows是\r\n、Linux是\n、旧Mac是\r)。如果目标文件中"""Brand\\Runner 2 Front"""和198mm之间的换行符是\r而非\n,就会被当成同一行处理,最终导致内容合并。

修复方案

替换拆分换行符的代码,兼容所有常见换行格式:

// 替换原有的Split('\n')为以下代码
string[] strTXTInput = webData.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);

额外优化点

  1. 你先执行了sRunnerSetName = strTXTInput[0].Replace("\"","");,但后续循环的case 0又重新赋值为未替换引号的原内容,导致引号替换操作无效,建议调整顺序或合并逻辑。
  2. 可以考虑使用WebClient.DownloadString直接获取字符串,简化代码:
string webData = wc.DownloadString(strRunnerTXTFile);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:15:56