Visual C++ .NET 또는 Visual C++ 2005를 사용하여 FileCompare 함수를 만드는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 816189 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

이 문서에서는 해당 내용을 동일한 있는지 두 파일을 비교하는 방법에 대해 설명합니다. 이 비교 시 두 파일의 내용을 보이지만 않은 파일 이름, 위치, 날짜, 시간, 또는 다른 특성을 않습니다.

이 기능을 위해 MS-MS-DOS 기반 Fc.exe 유사한 다양한 버전의 Microsoft Windows 및 Microsoft MS-DOS 일부 개발 도구와 함께 포함된 유틸리티.

이 문서에서 설명하는 예제 코드가 일치하지 않는 부분의 찾을 때까지 또는 파일의 끝에 도달할 때까지 의해 바이트 비교를 수행합니다. 이 코드는 또한 비교 효율성을 높이는 데 다음 두 가지 간단한 검사를 수행합니다.
  • 두 파일 모두 같은 파일으로의 참조를 지점을 파일 경우 같아야 합니다.
  • 두 크기가 다른 파일을 경우 두 파일이 서로 다릅니다.

샘플 만들기

  1. Visual Studio .NET 2003) 또는 Microsoft Visual Studio 2005 시작하십시오.
  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트 를 클릭하십시오.
  3. 프로젝트 형식Visual C++ 프로젝트 클릭한 다음 템플릿 에서 빈 프로젝트 (.NET)을 누릅니다. 프로젝트 이름을 FileCompare.

    참고 Visual Studio 2005에서 프로젝트 형식Visual C++ 클릭한 다음 템플릿 에서 빈 프로젝트 를 누릅니다.
  4. 솔루션 탐색기에서 FileCompare 마우스 오른쪽 단추로, 추가 를 가리킨 다음 새 항목 추가 클릭하십시오.
  5. 새 항목 추가 대화 상자의 템플릿 에서 헤더 파일 을 클릭하십시오. 이름 텍스트 상자에 Form1 을 입력한 다음 열기 를 클릭하십시오. Form1.h 파일이 표시됩니다.
  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)
    		{	 
    		}
    
    	};
    }
    이 코드에서는 두 텍스트 상자 컨트롤 및 명령 단추를 포함하는 폼을 만듭니다.

    참고 공용 언어 런타임 지원 컴파일러 옵션을 추가해야 합니다 (/clr:oldSyntax) 성공적으로 이전 코드 샘플을 컴파일하려면 Visual C++ 2005 에서. Visual C++ 2005에서는 공용 언어 런타임 지원 컴파일러 옵션을 추가하려면 다음과 같이 하십시오.
    1. 프로젝트 를 클릭한 다음 <ProjectName> 속성을.

      참고<ProjectName> 프로젝트 이름에 대한 자리 표시자입니다.
    2. 구성 속성 을 확장한 다음 일반 을 클릭하십시오.
    3. 확인란을 선택하고 공용 언어 런타임 지원, 이전 구문 (/clr:oldSyntax)공용 언어 런타임 지원 프로젝트 설정을 오른쪽 창에 적용 을 누른 다음 확인 을 누릅니다.
    공용 언어 런타임에 대한 자세한 내용은 컴파일러 옵션을 지원하는 보려면 다음 Microsoft 웹 사이트를 방문하십시오.
    /clr (공용 언어 런타임 컴파일)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
  7. 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. Form1 클래스에 button1_Click 명령 단추의 Click 이벤트에 다음 코드를 붙여:
    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. 솔루션 탐색기에서 FileCompare 마우스 오른쪽 단추로, 추가 를 가리킨 다음 새 항목 추가 클릭하십시오.
  10. 새 항목 추가 대화 상자의 템플릿 에서 C++ 파일 을 클릭하십시오. 이름 텍스트 상자에 File_Compare 를 입력한 다음 열기 를 클릭하십시오. File_Compare.cpp 파일이 표시됩니다.
  11. 다음 코드를 붙여 <windows.h> File_Compare.cpp file:
    #include "form1.h"
    
    #include <windows.h>
    #include <tchar.h>
    
    using namespace Compare;
  12. File_Compare.cpp 파일에 다음 WinMain 함수를 추가하여:
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
    }
  13. WinMain 함수에 다음 코드를 붙여:
    System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
    Application::Run(new Form1());
    return 0;
  14. 이 샘플에서는 저장하십시오.

샘플 실행

  1. 두 파일에서 텍스트 상자 컨트롤의 전체 경로를 제공해야 합니다.
  2. 비교 를 클릭하십시오.

참조

자세한 내용은 다음 Microsoft 개발자 네트워크 (MSDN) 웹 사이트를 방문하십시오.
System.IO 네임스페이스
FileStream 클래스 통한 파일 액세스

속성

기술 자료: 816189 - 마지막 검토: 2007년 11월 26일 월요일 - 수정: 2.3
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
키워드:?
kbmt kbhowtomaster kbhowto kbio KB816189 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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