将列表的内容写入文本文件
问题描述:
我有一个程序检查特定字段的两个文本文件,然后检查两个文件是否具有指定的字段。如果是的话那么匹配的数量存储到另一个目录。我遇到的问题是,它只是写第一个匹配的文本文件,当我知道我有两场比赛。我是相当新的C#所以任何帮助/建议将不胜感激,下面的代码是做检查。将列表<string>的内容写入文本文件
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;
}
}
}
感谢,
瑞安
答
WriteAllText
将overwrite现有的文件 - 所以只有一个单一的入口会出现被写入。
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);
}
}
}
或(如果既不lstStore103
也不lstStore101
有重复):
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);
}
答
的break;
负责,这将退出循环。 但是你也不想使用WriteAllText
它重写整个文本文件,但你想追加一个新的行。我会用这种方法:
string startPattern = " :22:";
List<string> lstStoreTwentyOne = File.ReadLines(path)
.Where(l => l.StartsWith(startPattern))
.Select(l => l.Substring(startPattern.Length))
.ToList();
这将创建并填充列表。我不知道这是如何与lstStore103
-list关联的。
然而,这会写所有的文本文件,并替换您的循环:
var matchingItems = lstStore103.Intersect(lstStore101);
File.WriteAllLines(@"H:\Compare.txt", matchingItems);
+0
感谢Tim的回应真的很有帮助,我已经接受mjwillis作为答案,因为现在这可以满足我的需求,但是当我重新构造代码时,我一定会使用你的,重新获得帮助。 – RyanK
参见:[System.IO.File.WriteAllLines](https://msdn.microsoft.com/library/dd383463。 aspx) – Corak