Usar o Visual C# para criar uma função File-Compare
Este artigo fornece informações sobre como criar uma função File-Compare no Visual C# e inclui um exemplo de código para explicar os métodos.
Versão original do produto: Visual C#
Número de KB original: 320348
Resumo
Este artigo refere-se ao namespace System.IO
da Biblioteca de Classes do Microsoft .NET Framework .
Este artigo passo a passo demonstra como comparar dois arquivos para ver se o conteúdo deles é o mesmo. Essa comparação analisa o conteúdo dos dois arquivos, não nos nomes de arquivo, locais, datas, horários ou outros atributos.
Essa funcionalidade é semelhante ao utilitário de Fc.exe baseado em MS-DOS que é incluído com várias versões do Microsoft Windows e Microsoft MS-DOS e com algumas ferramentas de desenvolvimento.
O código de exemplo descrito neste artigo executa uma comparação byte por byte até encontrar uma incompatibilidade ou chegar ao final do arquivo. O código também executa duas verificações simples para aumentar a eficiência da comparação:
- Se ambas as referências de arquivo apontarem para o mesmo arquivo, os dois arquivos devem ser iguais.
- Se o tamanho dos dois arquivos não for o mesmo, os dois arquivos não serão os mesmos.
Criar o exemplo
Crie um novo projeto do Aplicativo Windows do Visual C#. Por padrão, o Form1 é criado.
Adicione dois controles de caixa de texto ao formulário.
Adicione um botão de comando ao formulário.
No menu Exibir , clique em Código.
Adicione a seguinte
using
instrução àForm1
classe:using System.IO;
Adicione o seguinte método à 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); }
Cole o seguinte código no
Click
caso do botão 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."); } }
Salve e execute o exemplo.
Forneça os caminhos completos para os dois arquivos nas caixas de texto e clique no botão de comando.
Referências
Para obter mais informações, visite os sites da Microsoft System.IO Namespace.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de