将List <string>的内容写入文本文件

时间:2017-09-14 10:07:33

标签: c#

我有一个程序检查特定字段的两个文本文件,然后检查是否有任何文件具有指定的字段。如果是,那么匹配的数量将存储到另一个列表中。我遇到的问题是它只写了第一个匹配文本文件,当我知道我有两个匹配。我是C#的新手,所以任何帮助/建议都会受到赞赏,下面的代码正在检查。

while ((lineBeingRead = fileToRead.ReadLine()) != null)
{
    if (lineBeingRead.IndexOf("       :22:", 0) == 0)
    {
        lstTwentyOneCounter.Add(lineBeingRead.Substring(11));
        lstStoreTwentyOne = lstTwentyOneCounter;
    }
}

以下代码是写入文本文件。

foreach (var single103 in lstStore103)
{
    foreach (var single101 in lstStore101)
    {
        if (single101 == single103)
        {
            checkResults.Add(single103);
            System.IO.File.WriteAllText(@"H:\Compare.txt", single103);
            break;
        }
    }
}

谢谢,
莱恩

2 个答案:

答案 0 :(得分:2)

break;负责,它将离开循环。 但是您也不想使用WriteAllText来重写整个文本文件,但是您想要添加一个新行。我会用这种方法:

string startPattern = "       :22:";
List<string> lstStoreTwentyOne = File.ReadLines(path)
    .Where(l => l.StartsWith(startPattern))
    .Select(l => l.Substring(startPattern.Length))
    .ToList();

这将创建并填充列表。我不知道这与lstStore103 - 列表有什么关系。

但是,这会将所有内容写入文本文件并替换您的循环:

var matchingItems = lstStore103.Intersect(lstStore101);
File.WriteAllLines(@"H:\Compare.txt", matchingItems);

答案 1 :(得分:2)

WriteAllTextoverwrite现有文件 - 因此只会显示一个条目。

您需要改为appendwrite all

System.IO.File.Delete(@"H:\Compare.txt");

foreach (var single103 in lstStore103)
{
    foreach (var single101 in lstStore101)
    {
        if (single101 == single103)
        {
            checkResults.Add(single103);
            System.IO.File.AppendAllText(@"H:\Compare.txt", single103 + Environment.NewLine);
        }
    }
}

或(如果lstStore103lstStore101都没有重复):

System.IO.File.Delete(@"H:\Compare.txt");

foreach (var value in lstStore103.Intersect(lstStore101))
{
    checkResults.Add(value);
    System.IO.File.AppendAllText(@"H:\Compare.txt", value + Environment.NewLine);
}