Cómo crear una función de comparación de archivos en Visual C#

Para una versión de Microsoft Visual Basic .NET de este artículo, consulte 320346 .


Este artículo hace referencia al siguiente espacio de nombres de biblioteca de clases de Microsoft.NET Framework:

  • System.IO

EN ESTA TAREA

Resumen

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

Esta funcionalidad es similar a la utilidad Fc.exe basado en MS-DOS que se incluye con diferentes 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 a byte hasta que encuentra una discrepancia o llega al final del archivo. El código también realiza dos comprobaciones simples para aumentar la eficacia de la comparación:

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

Para crear el ejemplo

  1. Cree un nuevo proyecto de aplicación para Windows de Visual C#. De forma predeterminada, se crea Form1.
  2. Agregue dos controles textbox 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 instrucción USING a la clase Form1 :
    using System.IO;
  6. Agregue el método siguiente 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 evento Click 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. Proporcionar 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 siguientes sitios Web de Microsoft:

Acceso a archivos mediante la clase FileStream
(http://msdn2.microsoft.com/en-us/library/Aa903246(VS.71).aspx)
Propiedades

Id. de artículo: 320348 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios