본문 바로가기
프로그래밍

두 바이너리 파일간의 비교

by o테리o 2010. 4. 15.

해시값이 제공되지 않는 두 개의 바이너리 파일을 생성일자나 파일의 크기를 이용하여 비교하는 것이 아니라,
실제로 파일의 바이너리를 비교하여 파일이 동일한지를 검증하는 샘플

///<summary>

/// 두 바이너리 파일을 비교합니다.

///</summary>

///<remarks>

/// 생성일자등이 달라도 바이너리가 동일하다면 동일한 것으로 취급

///</remarks>

///<param name="filePath1">비교대상 파일1의 경로</param>

///<param name="filePath2">비교대상 파일2의 경로</param>

///<returns>파일이 동일한지 여부</returns>

public static bool Compare(string filePath1, string filePath2)

{

bool isSame = false;



int file1Byte;

int file2Byte;



FileStream file1Stream = new FileStream(filePath1, FileMode.Open);

FileStream file2Stream = new FileStream(filePath2, FileMode.Open);



// 파일의 크기가 다르다면 두 파일은 다른 파일임

if (file1Stream.Length != file2Stream.Length)

{

file1Stream.Close();

file2Stream.Close();

return false;

}



// 각 파일을 순차적으로 읽어가면서 1바이트씩 비교

do

{

file1Byte = file1Stream.ReadByte();

file2Byte = file2Stream.ReadByte();



// 비교한 바이트가 다르다면 Loop를 빠져나옴

}

while ((file1Byte == file2Byte) && (file1Byte != -1));



file1Stream.Close();

file2Stream.Close();

file1Stream.Dispose();

file2Stream.Dispose();



// 각 1바이트씩 읽어들인 결과가 다르면 Loop를 빠져나오므로

// 두 파일은 다른 것이고, 파일의 마지막까지 읽어서 빠져나왔을

// 경우에는 마지막 바이트도 동일 할 것이므로 두 파일은 동일함

isSame = (file1Byte == file2Byte);



return isSame;

}

'프로그래밍' 카테고리의 다른 글

MD5 Hash를 이용한 파일 검증  (0) 2010.04.15