Создание функции File-Compare с помощью Visual C#

В этой статье содержатся сведения о создании функции File-Compare в Visual C#, а также пример кода для объяснения методов.

Исходная версия продукта: Visual C#
Исходный номер базы знаний: 320348

Сводка

В этой статье описывается пространство System.IOимен библиотеки классов Microsoft платформа .NET Framework .

В этой пошаговой статье показано, как сравнить два файла, чтобы узнать, совпадает ли их содержимое. В этом сравнении рассматривается содержимое двух файлов, а не имена файлов, расположения, даты, время и другие атрибуты.

Эта функция аналогична служебной программе Fc.exe на основе MS-DOS, которая входит в состав различных версий Microsoft Windows и Microsoft MS-DOS, а также с некоторыми средствами разработки.

Пример кода, описанный в этой статье, выполняет байтовое сравнение до тех пор, пока не обнаружит несоответствие или не достигнет конца файла. Код также выполняет две простые проверки для повышения эффективности сравнения:

  • Если обе ссылки на файлы указывают на один и тот же файл, эти два файла должны быть равными.
  • Если размер двух файлов не совпадает, они не совпадают.

Создание примера

  1. Создайте новый проект приложения Windows Visual C#. По умолчанию создается Form1.

  2. Добавьте в форму два элемента управления textbox.

  3. Добавьте в форму кнопку команды.

  4. В меню Вид выберите код.

  5. Добавьте в класс следующую using инструкцию Form1 :

    using System.IO;
    
  6. Добавьте приведенный ниже метод в класс Form1:

    // This method accepts two strings the represent two files to
    // compare. A return value of 0 indicates that the contents of the files
    // are the same. A return value of any other value indicates that the
    // files are not the same.
    private bool FileCompare(string file1, string file2)
    {
        int file1byte;
        int file2byte;
        FileStream fs1;
        FileStream fs2;
    
        // Determine if the same file was referenced two times.
        if (file1 == file2)
        {
            // Return true to indicate that the files are the same.
            return true;
        }
    
        // Open the two files.
        fs1 = new FileStream(file1, FileMode.Open);
        fs2 = new FileStream(file2, FileMode.Open);
    
        // Check the file sizes. If they are not the same, the files
        // are not the same.
        if (fs1.Length != fs2.Length)
        {
            // Close the file
            fs1.Close();
            fs2.Close();
    
            // Return false to indicate files are different
            return false;
        }
    
        // Read and compare a byte from each file until either a
        // non-matching set of bytes is found or until the end of
        // file1 is reached.
        do
        {
            // Read one byte from each file.
            file1byte = fs1.ReadByte();
            file2byte = fs2.ReadByte();
        }
        while ((file1byte == file2byte) && (file1byte != -1));
    
        // Close the files.
        fs1.Close();
        fs2.Close();
    
        // Return the success of the comparison. "file1byte" is
        // equal to "file2byte" at this point only if the files are
        // the same.
        return ((file1byte - file2byte) == 0);
    }
    
  7. Вставьте следующий код в Click событие кнопки команды:

    private void button1_Click(object sender, System.EventArgs e)
    {
        // Compare the two files that referenced in the textbox controls.
        if (FileCompare(this.textBox1.Text, this.textBox2.Text))
        {
            MessageBox.Show("Files are equal.");
        }
        else
        {
            MessageBox.Show("Files are not equal.");
        }
    }
    
  8. Сохраните и запустите пример.

  9. Укажите полные пути к двум файлам в текстовых полях и нажмите кнопку команды.

Ссылки

Дополнительные сведения см. на веб-сайтах Майкрософт System.IO пространстве имен.