Tworzenie funkcji File-Compare przy użyciu języka Visual C#

Ten artykuł zawiera informacje o sposobie tworzenia funkcji File-Compare w języku Visual C# i zawiera przykładowy kod wyjaśniający metody.

Oryginalna wersja produktu: Visual C#
Oryginalny numer KB: 320348

Podsumowanie

W tym artykule odwołuje się do przestrzeni System.IOnazw biblioteki klas programu Microsoft .NET Framework.

W tym artykule krok po kroku pokazano, jak porównać dwa pliki, aby sprawdzić, czy ich zawartość jest taka sama. To porównanie analizuje zawartość dwóch plików, a nie nazwy plików, lokalizacji, dat, godzin lub innych atrybutów.

Ta funkcja jest podobna do narzędzia Fc.exe opartego na ms-DOS, które jest dołączone do różnych wersji systemów Microsoft Windows i Microsoft MS-DOS oraz z niektórymi narzędziami programistycznymi.

Przykładowy kod opisany w tym artykule wykonuje porównanie bajtów bajtów po bajtach, dopóki nie znajdzie niezgodności lub osiągnie koniec pliku. Kod wykonuje również dwa proste testy, aby zwiększyć wydajność porównania:

  • Jeśli oba odwołania do pliku wskazują ten sam plik, dwa pliki muszą być równe.
  • Jeśli rozmiar dwóch plików nie jest taki sam, dwa pliki nie są takie same.

Tworzenie przykładu

  1. Utwórz nowy projekt aplikacji systemu Windows w języku Visual C#. Domyślnie formularz Form1 jest tworzony.

  2. Dodaj do formularza dwie kontrolki pola tekstowego.

  3. Dodaj przycisk polecenia do formularza.

  4. W menu Widok kliknij pozycję Kod.

  5. Dodaj następującą using instrukcję Form1 do klasy:

    C#
    using System.IO;
    
  6. Dodaj następującą metodę do klasy Form1:

    C#
    // 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. Wklej następujący kod w Click przypadku przycisku polecenia:

    C#
    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. Zapisz, a następnie uruchom przykład.

  9. Podaj pełne ścieżki do dwóch plików w polach tekstowych, a następnie kliknij przycisk polecenia.

Informacje

Aby uzyskać więcej informacji, odwiedź witryny sieci Web firmy Microsoft System.IO przestrzeni nazw.