C#如何实现比较两个文件的内容是否完全相同?
3个回答
展开全部
//◆如果两个文件的大小不相同,则这两个文件的内容一定不相同,也就不需要进一步比较文件的内容。
protected void btnGoToCompare_Click(object sender, EventArgs e){string file1 =HttpContext.Current.Request.MapPath("~/1.txt");//第一个文件的名称
string file2 = HttpContext.Current.Request.MapPath( "~/2.txt");//第二个文件的名称
string script = "";
if (FileCompare(file1, file2)){script="alert('两个文件是相同的。')";
this.Page.ClientScript.RegisterStartupScript(GetType(),Guid.NewGuid().ToString(),script,true);}else{script = "alert('两个文件是不相同的。')";
this.Page.ClientScript.RegisterStartupScript(GetType(), Guid.NewGuid().ToString(), script, true);}}//此方法所接收的两个字符串代表您所要比较的两个文件。如果两个文件的内容完全相同,
//将返回 True;任何其他的返回值都表示这两个文件的内容有所差异。
private bool FileCompare(string file1, string file2){// 判断相同的文件是否被参考两次。
if (file1 == file2){return true;}int file1byte = 0;
int file2byte = 0;
FileStream fs2 = new FileStream(file2, FileMode.Open);
using (FileStream fs1 = new FileStream(file1, 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();}// 返回比较的结果。
protected void btnGoToCompare_Click(object sender, EventArgs e){string file1 =HttpContext.Current.Request.MapPath("~/1.txt");//第一个文件的名称
string file2 = HttpContext.Current.Request.MapPath( "~/2.txt");//第二个文件的名称
string script = "";
if (FileCompare(file1, file2)){script="alert('两个文件是相同的。')";
this.Page.ClientScript.RegisterStartupScript(GetType(),Guid.NewGuid().ToString(),script,true);}else{script = "alert('两个文件是不相同的。')";
this.Page.ClientScript.RegisterStartupScript(GetType(), Guid.NewGuid().ToString(), script, true);}}//此方法所接收的两个字符串代表您所要比较的两个文件。如果两个文件的内容完全相同,
//将返回 True;任何其他的返回值都表示这两个文件的内容有所差异。
private bool FileCompare(string file1, string file2){// 判断相同的文件是否被参考两次。
if (file1 == file2){return true;}int file1byte = 0;
int file2byte = 0;
FileStream fs2 = new FileStream(file2, FileMode.Open);
using (FileStream fs1 = new FileStream(file1, 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();}// 返回比较的结果。
展开全部
该哈希算法为一个文件生成一个小的二进制“指纹”,从统计学的角度来看,不同的文件不可能生成相同的哈希码 要生成一个哈希码,必须首先创建一个HashAlgorithm对象,通过HashAlgorithm.Create方法来完成。然后调用 HashAlgorithm.ComputeHash方法,它会返回一个存储哈希码的字节数组,再使用BitConverter.Tostring()将其 装换为字符串进行比较。 源码如下:复制代码代码如下:public static bool isValidFileContent(string filePath1, string filePath2){//创建一个哈希算法对象 using (HashAlgorithm hash = HashAlgorithm.Create()){using (FileStream file1 = new FileStream(filePath1, FileMode.Open),file2=new FileStream(filePath2,FileMode.Open)){byte[] hashByte1 = hash.ComputeHash(file1);//哈希算法根据文本得到哈希码的字节数组 byte[] hashByte2 = hash.ComputeHash(file2); string str1 = BitConverter.ToString(hashByte1);//将字节数组装换为字符串 string str2 = BitConverter.ToString(hashByte2); return (str1==str2);//比较哈希码}}}使用该函数的主函数复制代码代码如下:static void Main(string[] args){string filePath1 = @"f:/1.txt"; string filePath2 = @"f:/2.txt"; bool valid=isValidFileContent(filePath1, filePath2);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把一楼代码改的正常一点
把这个代码改正常一点
public static bool FileCompare(string file1, string file2)
{
if (file1 == file2) { return true; }
int file1byte = 0;
int file2byte = 0;
using (FileStream fs2 = new FileStream(file2, FileMode.Open))
{
using (FileStream fs1 = new FileStream(file1, FileMode.Open))
{
if (fs1.Length != fs2.Length)
{
return false;
}// 逐一比较两个文件的每一个字节,直到发现不相符或已到达文件尾端为止。
do
{// 从每一个文件读取一个字节。
file1byte = fs1.ReadByte();
file2byte = fs2.ReadByte();
} while ((file1byte == file2byte) && (file1byte != -1));
}
}
return true;
}
把这个代码改正常一点
public static bool FileCompare(string file1, string file2)
{
if (file1 == file2) { return true; }
int file1byte = 0;
int file2byte = 0;
using (FileStream fs2 = new FileStream(file2, FileMode.Open))
{
using (FileStream fs1 = new FileStream(file1, FileMode.Open))
{
if (fs1.Length != fs2.Length)
{
return false;
}// 逐一比较两个文件的每一个字节,直到发现不相符或已到达文件尾端为止。
do
{// 从每一个文件读取一个字节。
file1byte = fs1.ReadByte();
file2byte = fs2.ReadByte();
} while ((file1byte == file2byte) && (file1byte != -1));
}
}
return true;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询