string.Split
これは、 LINQ とTake
を使用する場合に簡単な問題ですSequenceEqual
。
bool AnyDifferent(string file1FullText, string file2FullText)
{
string[] file1Lines = file1FullText.Split('\n');
string[] file2Lines = file2FullText.Split('\n');
if (file1Lines.Length != file2Lines.Length)
return true;
for (int i = 0; i < file1Lines.Length; i++)
{
var file1LineSplit = file1Lines[i].Split('|');
var file2LineSplit = file2Lines[i].Split('|');
if (!file1LineSplit.Take(2).SequenceEqual(file2LineSplit.Take(2)))
return true;
}
return false;
}
パフォーマンスを向上させるために編集または使用File.ReadLines
します (比較を開始する前にファイル全体を読み込む必要はありません)。
bool AnyDifferent(string file1Path, string file2Path)
{
using (var file1Enumerator = File.ReadLines(file1Path).GetEnumerator())
using (var file2Enumerator = File.ReadLines(file2Path).GetEnumerator())
{
while (true)
{
bool result1 = file1Enumerator.MoveNext();
bool result2 = file2Enumerator.MoveNext();
if (result1 != result2)
return true;
else if (!result1 && !result2)
return false;
var file1LineSplit = file1Enumerator.Current.Split('|');
var file2LineSplit = file2Enumerator.Current.Split('|');
if (!file1LineSplit.Take(2).SequenceEqual(file2LineSplit.Take(2)))
return true;
}
}
}