Как сравнить текст содержимого двух файлов?C#

Место общения программистов C#
Ответить
Anonymous
 Как сравнить текст содержимого двух файлов?

Сообщение Anonymous »

Я использую этот код. проблема в том, что он выделяет красным места, которые представляют собой один и тот же текст.
единственная разница может заключаться в обрезке пробелов. но текст тот же, поэтому его не следует окрашивать в красный цвет.
идея состоит в том, чтобы сравнивать текстовое содержимое, а не форматирование текста.
Я пытался обработать случай, если есть какие-то различия в обрезке/пробелах, но в этих двух строках это пока не работает так, как я хотел:
string line1 = i < lines1.Length ? lines1.TrimEnd() : string.Empty;
string line2 = i < lines2.Length ? lines2.TrimEnd() : string.Empty;

здесь прикреплено изображение, показывающее результаты сравнения.
[img]https://i.sstatic.net /fPDmq56t.jpg[/img]

using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FileComparer
{
public partial class Form1 : Form
{
private string file1Path = null; // Path for the first selected file
private string file2Path = null; // Path for the second selected file

public Form1()
{
InitializeComponent();
}

private void btnSelectFile1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog
{
Title = "Select the First File",
Filter = "All Files|*.*"
};

if (openFileDialog.ShowDialog() == DialogResult.OK)
{
file1Path = openFileDialog.FileName;
rtbLogger.AppendText($"File 1 Selected: {file1Path}\n");
}
}

private void btnSelectFile2_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog
{
Title = "Select the Second File",
Filter = "All Files|*.*"
};

if (openFileDialog.ShowDialog() == DialogResult.OK)
{
file2Path = openFileDialog.FileName;
rtbLogger.AppendText($"File 2 Selected: {file2Path}\n");
}
}

private async void btnCompareFiles_Click(object sender, EventArgs e)
{
if (file1Path == null || file2Path == null)
{
MessageBox.Show("Please select two files to compare.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}

rtbLogger.AppendText($"Comparing Files:\n{file1Path}\n{file2Path}\n");
string content1 = await ReadFileAsync(file1Path);
string content2 = await ReadFileAsync(file2Path);

CompareAndHighlight(content1, content2);

rtbLogger.AppendText($"Comparison Completed: {DateTime.Now}\n--------------------\n");
}

private async Task ReadFileAsync(string filePath)
{
return await Task.Run(() => File.ReadAllText(filePath));
}

private void CompareAndHighlight(string content1, string content2)
{
rtbFile1.Clear();
rtbFile2.Clear();

rtbFile1.Text = content1;
rtbFile2.Text = content2;

string[] lines1 = content1.Split('\n');
string[] lines2 = content2.Split('\n');

int maxLines = Math.Max(lines1.Length, lines2.Length);
for (int i = 0; i < maxLines; i++)
{
string line1 = i < lines1.Length ? lines1.TrimEnd() : string.Empty;
string line2 = i < lines2.Length ? lines2.TrimEnd() : string.Empty;

if (!string.Equals(line1, line2, StringComparison.Ordinal))
{
HighlightDifference(rtbFile1, line1, i);
HighlightDifference(rtbFile2, line2, i);
}
}
}

private void HighlightDifference(RichTextBox rtb, string line, int lineNumber)
{
int start = rtb.GetFirstCharIndexFromLine(lineNumber);
int length = line.Length;

if (start >= 0 && length > 0)
{
rtb.Select(start, length);
rtb.SelectionBackColor = System.Drawing.Color.Red;
rtb.DeselectAll();
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ntent-text
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»