其實編寫這一個函數的主要目的是要示范如何執行一個字節接著一個字節的比較操作,直到發現不相符合者或是到達文件的尾端為止。我們的程序代碼會執行下列兩項簡單的檢查,以便提高比較的效率:
◆如果傳遞給函數的兩個文件引用是指向相同的文件,則這兩個文件一定相同,也就不需要進一步比較文件的內容。
◆如果兩個文件的大小不相同,則這兩個文件的內容一定不相同,也就不需要進一步比較文件的內容。
圖 1-34
圖1-34所示的是程序范例CH1_DemoForm044cs的執行畫面,它示范如何利用我們所編寫的FileCompare函數來比較兩個文件的內容是否完全相同。這裡將程序代碼列示如下:
private void btnGoToCompare_Click(object sender,EventArgs e)
{
if(FileCompare(this.TextBox1.Text,this.TextBox2.Text))
{
MessageBox.Show("兩個文件是相同的。");
}
else
{
MessageBox.Show("兩個文件並不相同。");
}
}
// 此方法所接收的兩個字符串代表您所要比較的兩個文件。如果兩個文件的內容完全相同,
將返回 True;任何其他
// 的返回值都表示這兩個文件的內容有所差異。
private bool FileCompare(string file1,string file2)
{
// 判斷相同的文件是否被參考兩次。
if(file1 == file2)
{
return true;
}
int file1byte = 0;
int file2byte = 0;
using(FileStream fs1 = new FileStream(file1,FileMode.Open),
fs2 = new FileStream(file2,FileMode.Open))
{
// 檢查文件大小。如果兩個文件的大小並不相同,則視為不相同。
if(fs1Length != fs2.Length)
{
// 關閉文件。
fs1.Close();
fs2.Close();
return false;
}
// 逐一比較兩個文件的每一個字節,直到發現不相符或已到達文件尾端為止。
do
{
// 從每一個文件讀取一個字節。
file1byte = fs1.ReadByte();
file2byte = fs2.ReadByte();
}
while ((file1byte == file2byte) && (file1byte != -1));
// 關閉文件。
fs1.Close();
fs2.Close();
}
// 返回比較的結果。在這個時候,只有當兩個文件的內容完全相同時,
"file1byte" 才會等於 "file2byte"。
return ((file1byte - file2byte) == 0);
}