Utiliser Visual C# pour créer une fonction File-Compare

Cet article fournit des informations sur la création d’une fonction File-Compare dans Visual C# et inclut un exemple de code pour expliquer les méthodes.

Version d’origine du produit : Visual C#
Numéro de la base de connaissances d’origine : 320348

Résumé

Cet article fait référence à l’espace de noms System.IObibliothèque de classes Microsoft .NET Framework .

Cet article pas à pas montre comment comparer deux fichiers pour voir si leur contenu est identique. Cette comparaison examine le contenu des deux fichiers, et non les noms de fichiers, les emplacements, les dates, les heures ou d’autres attributs.

Cette fonctionnalité est similaire à l’utilitaire de Fc.exe basé sur MS-DOS qui est inclus dans différentes versions de Microsoft Windows et Microsoft MS-DOS, ainsi qu’avec certains outils de développement.

L’exemple de code décrit dans cet article effectue une comparaison octet par octet jusqu’à ce qu’il trouve une incompatibilité ou qu’il atteigne la fin du fichier. Le code effectue également deux vérifications simples pour augmenter l’efficacité de la comparaison :

  • Si les deux références de fichier pointent vers le même fichier, les deux fichiers doivent être égaux.
  • Si la taille des deux fichiers n’est pas la même, les deux fichiers ne sont pas identiques.

Créer l’exemple

  1. Créez un projet d’application Windows Visual C#. Par défaut, Form1 est créé.

  2. Ajoutez deux contrôles de zone de texte au formulaire.

  3. Ajoutez un bouton de commande au formulaire.

  4. Dans le menu Affichage, cliquez sur Code.

  5. Ajoutez l’instruction suivante using à la Form1 classe :

    using System.IO;
    
  6. Ajoutez la méthode suivante à la 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. Collez le code suivant dans l’événement Click du bouton de commande :

    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. Enregistrez, puis exécutez l’exemple.

  9. Indiquez les chemins d’accès complets aux deux fichiers dans les zones de texte, puis cliquez sur le bouton de commande.

References

Pour plus d’informations, visitez les sites web Microsoft System.IO Namespace.