Condividi tramite


Usare Visual C# per creare una funzione File-Compare

Questo articolo fornisce informazioni su come creare una funzione File-Compare in Visual C# e include un esempio di codice per spiegare i metodi.

Versione originale del prodotto: Visual C#
Numero KB originale: 320348

Riepilogo

Questo articolo fa riferimento allo spazio dei nomi System.IOdella libreria di classi di Microsoft .NET Framework.

Questo articolo dettagliato illustra come confrontare due file per verificare se il contenuto è lo stesso. Questo confronto esamina il contenuto dei due file, non nei nomi dei file, nei percorsi, nelle date, nelle ore o in altri attributi.

Questa funzionalità è simile all'utilità di Fc.exe basata su MS-DOS inclusa in varie versioni di Microsoft Windows e Microsoft MS-DOS e con alcuni strumenti di sviluppo.

Il codice di esempio descritto in questo articolo esegue un confronto di byte per byte fino a quando non trova una mancata corrispondenza o raggiunge la fine del file. Il codice esegue anche due semplici controlli per aumentare l'efficienza del confronto:

  • Se entrambi i riferimenti a file puntano allo stesso file, i due file devono essere uguali.
  • Se le dimensioni dei due file non sono uguali, i due file non sono uguali.

Creare l'esempio

  1. Creare un nuovo progetto applicazione Windows Visual C#. Per impostazione predefinita, viene creato Form1.

  2. Aggiungere due controlli casella di testo al form.

  3. Aggiungere un pulsante di comando al modulo.

  4. Scegliere Codice dal menu Visualizza.

  5. Aggiungere l'istruzione seguente using alla Form1 classe :

    using System.IO;
    
  6. Aggiungere il metodo seguente alla classe 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. Incollare il codice seguente nel Click caso del pulsante di comando:

    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. Salvare ed eseguire l'esempio.

  9. Specificare i percorsi completi dei due file nelle caselle di testo e quindi fare clic sul pulsante di comando.

Riferimenti

Per altre informazioni, visitare i siti Web Microsoft System.IO Spazio dei nomi.