Como criar uma função de comparação de ficheiros no Visual C#

Traduções de Artigos Traduções de Artigos
Artigo: 320348 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo demonstra como comparar dois ficheiros para averiguar se o respectivo conteúdo é os mesmos. Esta comparação consultará o conteúdo de dois ficheiros, não nos nomes dos ficheiros, localizações, datas, horas ou outros atributos.

Esta funcionalidade é semelhante ao utilitário Fc.exe baseados no MS DOS, que é incluído com diversas versões do Microsoft Windows e MS-DOS da Microsoft e com algumas ferramentas de desenvolvimento.

O código de exemplo descrito neste artigo efectua uma comparação de byte a byte até encontrar um erro de correspondência ou chega ao fim do ficheiro. O código também executa duas verificações simples para aumentar a eficiência da comparação:
  • Se ambos ficheiro ponto referências para o mesmo ficheiro, os dois ficheiros tem de ser iguais.
  • Se o tamanho dos dois ficheiros não é o mesmo, os dois ficheiros não estão a mesma.

Para criar o exemplo

  1. Crie um novo projecto de aplicação do Windows do Visual C#. Por predefinição, é criado o Form1.
  2. Adicione dois controlos de caixa de texto ao formulário.
  3. Adicionar um botão de comando ao formulário.
  4. No menu Ver , clique em código .
  5. Adicione a seguinte instrução USING à classe Form1 :
    using System.IO;
    					
  6. 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);
    }
    					
  7. Cole o seguinte código no evento Click 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.");
          }  
    } 
    					
  8. Guarde e, em seguida, execute o exemplo.
  9. Fornecer os caminhos completos para os dois ficheiros em caixas de texto e, em seguida, clique no botão de comando.

Referências

Para obter mais informações, visite os seguintes Web sites da Microsoft:
Espaço de nomes System.IO
(http://msdn2.microsoft.com/en-us/library/system.io(vs.71).aspx)
Ficheiro acesso através de classe FileStream
(http://msdn2.microsoft.com/en-us/library/Aa903246(VS.71).aspx)

Propriedades

Artigo: 320348 - Última revisão: 26 de novembro de 2007 - Revisão: 1.6
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
Palavras-chave: 
kbmt kbhowtomaster kbio KB320348 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 320348

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com