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