Создание функции 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, а также с некоторыми средствами разработки.
Пример кода, описанный в этой статье, выполняет байтовое сравнение до тех пор, пока не обнаружит несоответствие или не достигнет конца файла. Код также выполняет две простые проверки для повышения эффективности сравнения:
- Если обе ссылки на файлы указывают на один и тот же файл, эти два файла должны быть равными.
- Если размер двух файлов не совпадает, они не совпадают.
Создание примера
Создайте новый проект приложения Windows Visual C#. По умолчанию создается Form1.
Добавьте в форму два элемента управления textbox.
Добавьте в форму кнопку команды.
В меню Вид выберите код.
Добавьте в класс следующую
using
инструкциюForm1
:using System.IO;
Добавьте приведенный ниже метод в класс
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); }
Вставьте следующий код в
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."); } }
Сохраните и запустите пример.
Укажите полные пути к двум файлам в текстовых полях и нажмите кнопку команды.
Ссылки
Дополнительные сведения см. на веб-сайтах Майкрософт System.IO пространстве имен.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по