我正在寻找一种最佳方法来快速比较两个文本文件(大约15000行),并获取输出字符串,这些字符串在两个文件中不同。
第一个文件是旧清单,第二个文件是当前清单,我想生成一个第三个文件,其中包含在file2和file1之间不同的字符串。 (95%的两个文件将是相似的)。
非常简单的方法,假设相似意味着相等:
var file1Lines = File.ReadLines(file1Path);
var file2Lines = File.ReadLines(file2Path);
IEnumerable<String> inFirstNotInSecond = file1Lines.Except(file2Lines);
IEnumerable<String> inSecondNotInFirst = file2Lines.Except(file1Lines);
您可以使用 foreach
枚举每一行。
ToList()
等方式将查询实例化,或者使用File.ReadAllLines
来避免在同时使用两个序列时出现ObjectDisposedException
。File.ReadLines
会流式读取行,并在完成后关闭底层流。我仍然展示了ReadLines
,因为它在内存消耗方面是最佳选择。 - Tim SchmelterReadLines
会像Streamreader
一样逐行流式传输,而ReadAllLines
会将所有行读入内存中的String[]
。因此,第一个不会使用内存,而第二个将所有内容都放入内存中。如果您拥有足够的内存且文件不太大,则可以使用File.ReadAllLines
。请注意,内存消耗和_性能_不一定相关。 - Tim Schmelter