Visual C# 2005中实现比较两个文件的内容是否完全相同

其实编写这一个函数的主要目的是要示范如何执行一个字节接着一个字节的比较操作,直到发现不相符合者或是到达文件的尾端为止。我们的程序代码会执行下列两项简单的检查,以便提高比较的效率:

◆如果传递给函数的两个文件引用是指向相同的文件,则这两个文件一定相同,也就不需要进一步比较文件的内容。

◆如果两个文件的大小不相同,则这两个文件的内容一定不相同,也就不需要进一步比较文件的内容。

图 1-34

图1-34所示的是程序范例CH1_DemoForm044cs的执行画面,它示范如何利用我们所编写的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(fs1Length != 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);
}

时间: 2024-09-25 08:53:58

Visual C# 2005中实现比较两个文件的内容是否完全相同的相关文章

Visual C++ 2005中混合代码的初始化

在Visual Studio .NET 2003中初始化混合DLLs很麻烦,需要手工干预.但在 Visual Studio 2005 中,Visual C++ 和 CLR 团队设计了一种新的初始化模型,这种新模型更简单,更自动化. Visual Studio .NET 2003 的根本问题在于将本地代码和托管代码一起置于单"池"中.DllMain 期间该池的运行是不安全的,托管代码根本就不能在这里运行. 新的模型将静态初始化汇集在两个单独的池中.一个池负责本地的静态初始化:另一个负责托

Visual C++ 2005中的突破性变化

Microsoft Visual C++ 2005是微软公司Visual Studio 2005开发套件中的一出重头戏,与前一个版本相比,其革新性的集成开发环境与C++编译器,带来了有许多改变.在本文中,主要讲解程序员在升级程序时,可能会遇到的一些不同之处及变化,而这些变化很可能会使老一点的程序不能通过编译.总之,这些变化绝不是偶然发生的,其背后都有强大的理论依据在支撑,所以,使用Visual C++的程序员,在升级之前,一定要弄清楚这些变化. Visual C++中已经发生的变化 微软Visu

Visual C++ 2005中的XML注释

C#程序员可以用三个斜杠来开始XML格式的注释,而且编译器可以据此生成可用于自动生成帮助文档的XML文件.Visual C++ 2005中的编译器也支持了这个功能,而且对非托管函数也生效,前提是必须打开/clr和/DOC开关,并且不能使用/clr:oldSyntax开关编译. /**///////Use two bubble sort steps ///to show the performance information///of different function calls./// in

如何在Microsoft Visual Studio 2005中创建控制台应用程序

在 Visual Studio 2005 中创建控制台应用程序 在 Visual Studio 2005 中的"文件" 菜单上,指向"新建" 并单击"项目". 在"新建项目" 对话框中,选择一种语言,然后在"项目类型" 框中选择"Windows". 在"模板" 框中,选择"控制台应用程序" . 在"位置" 框中,键入指向应用程序

Visual C++ 2005中的命名返回值优化

多年来,Microsoft Visual C++编译器一直在努力寻求更新的技术与优化方式,以求最大可能地提高程序的性能.此文描述了Visual C++编译器在不同情况下,是怎样消除多余的复制构造函数和析构函数的. 通常来说,当方法返回对象的一个实例时,会创建一个临时对象,并通过复制构造函数复制到目标对象中.在C++标准中,允许省略复制构造函数(哪怕会导致不同的程序行为),但这有一个副作用,就是编译器可能会把两个对象当成一个.Visual C++ 8.0(Visual C++ 2005)充分利用了

Visual Studio 2005中C++的变化

下一代visual studio版本(以前whidbey,现在是visual studio 2005)提供更加丰富的改进的库文件和没有很多幕后精简和加速的压力,它的大量配合的工具和新的功能将使开发者的开发过程变得简单有趣,对我而言,这些与visual studio 2005对C++的处理相比就显得有些苍白,这里我主要谈谈在下一代visual studio中C++的变化. 跟下划线拜拜 在visual studio.NET中引入了对C++扩展名的处理,扩展名是以两个下划线开始的关键字,比如__gc

asp.net夜话之四:Visual Studio 2005中容易被忽略的技巧

在今天我主要要介绍的有如下知识点: Visual Studio 2005网站开发环境 任务管理器 配置外部工具 代码段管理器 发布网站 之所以要单独用一篇文章来介绍Visual Studio 2005这个集成开发环境,是因为在做企业培训的时候,发现很多程序员仅仅用了一些基本功能,这个好像也符合软件界一个"20%和80%法则",就是80%的用户只用到了软件的20%的功能.确实有时候利用基本功能就足以进行开发了,但是有些功能能够方便我们的开发,有些能提高我们的开发速度,所以我觉得这些计较值

如何用c#实现比较两个文件的内容,并得出比较结果

问题描述 因为两个文件顺序不是完全相同的,如果错开一行可能导致结果相差很多.我的想法是首先需要找到最大匹配度的再去进行比较,好像很困难.不知道uedit是如何实现的.或者可以通过命令行调用的软件且能导出结果的帮忙推荐个也行. 解决方案 解决方案二:你想多了,想复杂了.这种比较不需要什么"最大匹配度"概念.例如:1.2.3.4.5.6与1.2.a.b.4.5.6你可以说是前边"插入"了两行,也可以说是后边"缺少"了两行,同样一个话可以正反面都是同一

如何用C#实现对比两个文件夹内容的差异

问题描述 解决方案 解决方案二:只比较是否有区别,只要做md5就知道了,如果要具体到何处有区别,我想到的只能是逐行逐字逐字节比较了解决方案三:嗯我想对比两个文件夹的时候展现出文件夹内容的不同然后显示差异报告不是对比文件的不同解决方案四:这没什么好说的呀.c#的File类,Direcotry类已经提供了足够的方便的方法.你就一句句写代码就是了.剩下的问题其实没有技术问题,就是业务规则.你是要比较一个文件夹下的文件数是否一致?你是要比较文件名是否一致?比较文件内容是否一致?都是业务规则.技术上没有任