Entrar

Como criar uma função FileCompare usando o Visual C++ .NET ou Visual C++ 2005

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

816189
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 320348.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 320346.
Este artigo se refere ao seguinte Microsoft .NET Framework Class Library namespace:

System.IO

Sumário
Este artigo passo a passo descreve como comparar dois arquivos para ver se o seu conteúdo é os mesmos. Essa comparação examina o conteúdo de dois arquivos, mas não em nomes de arquivo, locais, datas, horas ou outros atributos.

Essa funcionalidade é semelhante ao Fc.exe MS com utilitário que está incluído com várias versões do Microsoft Windows e o Microsoft MS-DOS e com algumas ferramentas de desenvolvimento.

O código de exemplo que é descrito neste artigo executa uma comparação byte por byte até uma incompatibilidade for encontrada ou até o final do arquivo é alcançado. O código também executa as seguintes verificações simples dois para aumentar a eficiência da comparação:
  • Se ambos arquivos ponto referências para o mesmo arquivo, os dois arquivos devem ser iguais.
  • Se o tamanho dos dois arquivos diferente, os dois arquivos são diferentes.

Criar o exemplo

  1. Inicie o Visual Studio .NET (2003) ou Microsoft Visual Studio 2005.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  3. Clique em Projetos do Visual c++ em Tipos de projeto e, em seguida, clique em Projeto vazio (NET) em modelos . Nomeie o projeto FileCompare .

    Observação No Visual Studio 2005, clique em Visual C++ em Tipos de projeto e, em seguida, clique em Projeto vazio em modelos .
  4. No Solution Explorer, clique com o botão direito do mouse FileCompare , aponte para Add e, em seguida, clique em Add New Item .
  5. Na caixa de diálogo Add New Item , clique em Arquivo de cabeçalho em modelos . Na caixa de texto nome , digite Form1 e, em seguida, clique em Abrir . O arquivo Form1.h é exibido.
  6. Paste the following code in the Form1.h file:
    #pragma once#using <mscorlib.dll>#using <system.windows.forms.dll>#using <system.dll>#using <system.drawing.dll>namespace Compare{	using namespace System;	using namespace System::ComponentModel;	using namespace System::Collections;	using namespace System::Windows::Forms;	using namespace System::Drawing;	using namespace System::IO;	public __gc class Form1 : public System::Windows::Forms::Form	{		public:		Form1(void)		{			InitializeComponent();		}  	protected:		void Dispose(Boolean disposing)		{			if (disposing && components)			{				components->Dispose();			}			__super::Dispose(disposing);		}		private: System::Windows::Forms::TextBox *  textBox1;	private: System::Windows::Forms::TextBox *  textBox2;	private: System::Windows::Forms::Label *  label1;	private: System::Windows::Forms::Label *  label2;	private: System::Windows::Forms::Button *  Compare;	private:		System::ComponentModel::Container * components;				void InitializeComponent(void)		{			this->textBox1 = new System::Windows::Forms::TextBox();			this->textBox2 = new System::Windows::Forms::TextBox();			this->label1 = new System::Windows::Forms::Label();			this->label2 = new System::Windows::Forms::Label();			this->Compare = new System::Windows::Forms::Button();			this->SuspendLayout();			// 			// textBox1			// 			this->textBox1->Location = System::Drawing::Point(32, 104);			this->textBox1->Name = S"textBox1";			this->textBox1->TabIndex = 0;			this->textBox1->Text = S"";			// 			// textBox2			// 			this->textBox2->Location = System::Drawing::Point(168, 104);			this->textBox2->Name = S"textBox2";			this->textBox2->TabIndex = 1;			this->textBox2->Text = S"";			// 			// label1			// 			this->label1->Location = System::Drawing::Point(32, 64);			this->label1->Name = S"label1";			this->label1->TabIndex = 2;			this->label1->Text = S"File1";			// 			// label2			// 			this->label2->Location = System::Drawing::Point(176, 64);			this->label2->Name = S"label2";			this->label2->TabIndex = 3;			this->label2->Text = S"File2";			// 			// Compare			// 			this->Compare->Location = System::Drawing::Point(96, 168);			this->Compare->Name = S"Compare";			this->Compare->TabIndex = 4;			this->Compare->Text = S"Compare";			this->Compare->Click += new System::EventHandler(this, button1_Click);			// 			// Form1			// 			this->AutoScaleBaseSize = System::Drawing::Size(5, 13);			this->ClientSize = System::Drawing::Size(292, 273);			this->Controls->Add(this->Compare);			this->Controls->Add(this->label2);			this->Controls->Add(this->label1);			this->Controls->Add(this->textBox2);			this->Controls->Add(this->textBox1);			this->Name = S"Form1";			this->Text = S"Form1";			this->ResumeLayout(false);		}	private:		System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)		{	 		}	};}
    esse código cria um formulário que contém dois controles de caixa de texto e um botão de comando.

    Observação Você deve adicionar a opção de compilador de suporte de tempo de execução idioma comum (/ CLR: oldSyntax) no Visual C++ 2005 a compilar com êxito o exemplo de código anterior. Para adicionar a opção de compilador de suporte de tempo de execução idioma comum no Visual C++ 2005, siga estas etapas:
    1. Clique em Project e clique em <ProjectName> propriedades .

      Observação <ProjectName> é um espaço reservado para o nome do projeto.
    2. Expanda Configuration Properties e, em seguida, clique em Geral .
    3. Clique para selecionar Common Language Runtime suporte, sintaxe antiga (/ CLR: oldSyntax) no projeto oferece suporte a Common Language Runtime configuração no painel à direita, clique em Aplicar e em seguida, clique em OK .
    Para obter mais informações sobre o common language runtime oferece suporte à opção do compilador, visite o seguinte site da Microsoft:
    / clr (Common Language Runtime Compilation)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
  7. Adicione a seguinte função à classe Form1 :
    // This method accepts two strings that 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 different.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 (String::Equals(file1,file2))	{		// Return true to indicate that the files are the same.		return true;	}        	// Open the two files.	try	{		fs1 = new FileStream(file1, FileMode::Open);		fs2 = new FileStream(file2, FileMode::Open);				    		// Check the file sizes. If the sizes are different, the files 		// are different.		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();	}		catch(Exception *ex)	{		if(fs1)		{			fs1->Close();		}		if(fs2)		{			fs2->Close();		}		throw ex;	}	// 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);}
  8. Cole o seguinte código no evento Click do botão de comando Button1_Click na classe Form1 : tente
    try{	if (FileCompare(this->textBox1->Text, this->textBox2->Text))	{		MessageBox::Show("Files are equal.");					}	else	{		MessageBox::Show("Files are not equal.");	}}catch(Exception *ex){	MessageBox::Show(ex->Message);}
  9. No Solution Explorer, clique com o botão direito do mouse FileCompare , aponte para Add e, em seguida, clique em Add New Item .
  10. Na caixa de diálogo Add New Item , clique em Arquivo C++ em modelos . Na caixa de texto nome , digite File_Compare e, em seguida, clique em Abrir . O arquivo File_Compare.cpp é exibido.
  11. Cole o seguinte código no file:
    #include "form1.h"#include <windows.h>#include <tchar.h>using namespace Compare;
  12. Adicione a seguinte função WinMain ao arquivo File_Compare.cpp:
    int APIENTRY _tWinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPTSTR    lpCmdLine,                     int       nCmdShow){}
  13. Cole o seguinte código na função WinMain :
    System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;Application::Run(new Form1());return 0;
  14. O exemplo de salvar.

Executar o exemplo

  1. Fornece caminhos completos para dois arquivos nos controles de caixa de texto.
  2. Clique em Comparar .
Referências
Para obter mais informações, visite os seguintes sites do Microsoft Developer Network (MSDN) da:
System.IO Namespace
Acesso de arquivo até a classe FileStream

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 816189 - Última Revisão: 01/17/2015 06:55:23 - Revisão: 2.3

  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • kbnosurvey kbarchive kbmt kbhowtomaster kbhowto kbio KB816189 KbMtpt
Comentários