Verwenden von Visual C# zum Erstellen einer File-Compare-Funktion

Dieser Artikel enthält Informationen zum Erstellen einer File-Compare-Funktion in Visual C# und enthält ein Codebeispiel zur Erläuterung der Methoden.

Ursprüngliche Produktversion: Visual C#
Ursprüngliche KB-Nummer: 320348

Zusammenfassung

Dieser Artikel bezieht sich auf den Microsoft .NET Framework-Klassenbibliotheksnamespace System.IO.

In diesem Schritt-für-Schritt-Artikel wird veranschaulicht, wie Sie zwei Dateien vergleichen, um festzustellen, ob ihr Inhalt identisch ist. Dieser Vergleich untersucht den Inhalt der beiden Dateien, nicht die Dateinamen, Speicherorte, Datumsangaben, Uhrzeiten oder andere Attribute.

Diese Funktionalität ähnelt dem MS-DOS-basierten Fc.exe-Hilfsprogramm, das in verschiedenen Versionen von Microsoft Windows und Microsoft MS-DOS sowie mit einigen Entwicklungstools enthalten ist.

Der in diesem Artikel beschriebene Beispielcode führt einen Byte-byte-Vergleich durch, bis ein Konflikt gefunden wird oder das Ende der Datei erreicht wird. Der Code führt auch zwei einfache Überprüfungen durch, um die Effizienz des Vergleichs zu erhöhen:

  • Wenn beide Dateiverweise auf dieselbe Datei verweisen, müssen die beiden Dateien gleich sein.
  • Wenn die Größe der beiden Dateien nicht identisch ist, sind die beiden Dateien nicht identisch.

Erstellen des Beispiels

  1. Erstellen Sie ein neues Visual C#-Windows-Anwendungsprojekt. Standardmäßig wird Form1 erstellt.

  2. Fügen Sie dem Formular zwei Textfeld-Steuerelemente hinzu.

  3. Fügen Sie dem Formular eine Befehlsschaltfläche hinzu.

  4. Klicken Sie im Menü Ansicht auf Code.

  5. Fügen Sie der -Klasse die Form1 folgende using -Anweisung hinzu:

    using System.IO;
    
  6. Fügen Sie der Form1-Klasse die folgende Methode hinzu:

    // 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. Fügen Sie den folgenden Code im Click Fall der Befehlsschaltfläche ein:

    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. Speichern Sie das Beispiel, und führen Sie es dann aus.

  9. Geben Sie die vollständigen Pfade zu den beiden Dateien in den Textfeldern an, und klicken Sie dann auf die Befehlsschaltfläche.

References

Weitere Informationen finden Sie auf den Microsoft-Websites System.IO Namespace.