Uso de Visual C# para crear una función de File-Compare

En este artículo se proporciona información sobre cómo crear una función de File-Compare en Visual C# e incluye un ejemplo de código para explicar los métodos.

Versión original del producto: Visual C#
Número de KB original: 320348

Resumen

En este artículo se hace referencia al espacio de nombres System.IObiblioteca de clases de Microsoft .NET Framework .

En este artículo paso a paso se muestra cómo comparar dos archivos para ver si su contenido es el mismo. En esta comparación se examina el contenido de los dos archivos, no en los nombres de archivo, las ubicaciones, las fechas, las horas u otros atributos.

Esta funcionalidad es similar a la utilidad de Fc.exe basada en MS-DOS que se incluye con varias versiones de Microsoft Windows y Microsoft MS-DOS, y con algunas herramientas de desarrollo.

El código de ejemplo que se describe en este artículo realiza una comparación byte por byte hasta que encuentra una falta de coincidencia o llega al final del archivo. El código también realiza dos comprobaciones sencillas para aumentar la eficacia de la comparación:

  • Si ambas referencias de archivo apuntan al mismo archivo, los dos archivos deben ser iguales.
  • Si el tamaño de los dos archivos no es el mismo, los dos archivos no son iguales.

Creación del ejemplo

  1. Cree un nuevo proyecto de aplicación windows de Visual C#. De forma predeterminada, se crea Form1.

  2. Agregue dos controles de cuadro de texto al formulario.

  3. Agregue un botón de comando al formulario.

  4. En el menú Ver, haga clic en Código.

  5. Agregue la siguiente using instrucción a la Form1 clase :

    using System.IO;
    
  6. Agregue el siguiente método a la clase 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. Pegue el código siguiente en el Click caso del botón de 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. Guarde y ejecute el ejemplo.

  9. Proporcione las rutas de acceso completas a los dos archivos en los cuadros de texto y, a continuación, haga clic en el botón de comando.

Referencias

Para obtener más información, visite los sitios web de Microsoft System.IO Espacio de nombres.