프로그래밍/C#

C# 파일 비교 함수를 만드는 방법

bluecandyg 2013. 7. 24. 10:29

이 문서에서는 해당 내용을 동일한 있는지 두 파일을 비교 하는 방법을 보여 줍니다. 이 비교는 파일 이름, 위치, 날짜, 시간, 또는 다른 특성에는 두 파일의 내용을 살펴봅니다.

이 기능은 다양 한 버전의 Microsoft Windows 및 Microsoft MS-DOS와 일부 개발 도구에 포함 된 DOS 기반 Fc.exe 유틸리티와 비슷합니다.

이 문서에서 설명 하는 샘플 코드는 불일치를 발견할 또는 파일의 끝에 도달할 때까지 바이트 단위로 비교를 합니다. 코드는 또한 비교 효율을 두 가지 간단한 검사를 수행 합니다.

  • 두 파일 모두 참조 지점 같은 파일에 파일 경우 같아야 합니다.
  • 두 파일의 크기가 동일한 아닌 경우 두 파일이 동일한 않습니다.

샘플 만들기

  1. 새 Visual C# Windows 응용 프로그램 프로젝트를 만듭니다. Form1이 기본적으로 만들어집니다.
  2. 두 개의 textbox 컨트롤을 폼에 추가 합니다.
  3. 명령 단추를 폼에 추가 합니다.
  4. 보기 메뉴에서 코드 를 클릭 합니다.
  5. 다음 문을 사용 하 여 Form1 클래스에 추가 합니다.
    using System.IO;
    					
  6. 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. 명령 단추의 Click 이벤트에 다음 코드를 붙여:
    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. 저장한 후 예제를 실행하십시오.
  9. 텍스트 상자, 두 파일에 대한 전체 경로를 입력한 다음 명령 단추를 클릭하십시오.