其实编写这一个函数的主要目的是要示范如何执行一个字节接着一个字节的比较操作,直到发现不相符合者或是到达文件的尾端为止。我们的程序代码会执行下列两项简单的检查,以便提高比较的效率:
◆如果传递给函数的两个文件引用是指向相同的文件,则这两个文件一定相同,也就不需要进一步比较文件的内容。
◆如果两个文件的大小不相同,则这两个文件的内容一定不相同,也就不需要进一步比较文件的内容。
图 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);
}