Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Сравнение файлов по содержимому


Автор: Cold_Almaty 28.4.2008, 12:02
Всем доброго времени суток.
Как программно сравнить два и более файлов по содержимому? Если можно пример  smile 

Автор: Ram1reS 28.4.2008, 12:23
Смотря какие файлы сравнивать - если просто текстовые, то :

Код

bool isNotEqual = false;
int lineNumber = 0;
int i = 0;
StreamReader sr1 = new StreamReader(@"C:\file1.txt");
StreamReader sr2 = new StreamReader(@"C:\file2.txt");

while(!sr1.EndOfStream && !sr2.EndOfStream)
{
    i++;
    string line1 = sr1.ReadLine();
    string line2 = sr2.ReadLine();

    if ( line1 != line2 )
    {
         isNotEqual = true;
         lineNumber = i;
    }
}

if ( isNotEqual )
{
    Console.WriteLine("Not equal line {0}",lineNumber);
}

sr1.Close();
sr2.Close();

Автор: Owner 28.4.2008, 12:24
См. пример в MSDN по методу File.OpenRead. Читаешь два файла в байтовые массивы, а затем в цикле сравниваешь массивы побайтно. Если хотя-бы один байт не сравнивается заканчиваешь цикл с ошибкой - "файлы не равны" иначе файлы идентичны. (С#) smile 

Автор: Cold_Almaty 28.4.2008, 12:46
for Ram1reS:  Файлы не обязательно текстовые.
 
А можно как нибудь сравнить хэш файлов?

Автор: Moid 28.4.2008, 13:05
Вот так при промощи NUnit можно:
Код

FileAssert.AreEqual("file1", "file2");

Автор: mr.DUDA 28.4.2008, 13:24
Цитата(Cold_Almaty @  28.4.2008,  12:46 Найти цитируемый пост)
А можно как нибудь сравнить хэш файлов?

Пример уже был, в поиске найдётся по слову MD5. Вкратце:
Код
            MD5 md = MD5.Create();
            md.ComputeHash(stream);

Автор: Cold_Almaty 28.4.2008, 13:28
for Moid: Что такое NUnit? И FileAssert?   

Автор: Moid 28.4.2008, 13:46
Цитата(Cold_Almaty @ 28.4.2008,  13:28)
for Moid: Что такое NUnit? И FileAssert?

NUnit - тестирование приложения.
Вот подробнее с примерами:
http://www.xprogramming.com/xpmag/acsUsingNUnit.htm

Автор: mr.DUDA 28.4.2008, 13:59
Ага, и запускать приложение через nunit.exe имя_проги  smile 

Чем способ с MD5 не угодил? Сравнить хеши и всё.

Автор: Ch0bits 28.4.2008, 15:05
Вместо запуска ваших хитрых NUnit'ов и хешев можно сначала просто сравнить размеры файлов - не равны, значит разные.  smile 

Автор: mr.DUDA 28.4.2008, 15:28
Наш хеш не хитрый, он простой как доска.  smile 

Автор: Cold_Almaty 29.4.2008, 09:00
Пасиб всем откликнувшемся.
Сделал через сравнение хэш-сумм. Всё оказалось очень просто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)