高手请关注:WinCE6 用C#程序进行2个文件比较,使用Hashcode计算值比较就可能失败,但是用byte比较却通过。请问什么原因?

cherry9400 2012-01-04 02:41:09
先生成一个由ramdom的数据产生的大约3M的文件。
然后复制这个文件。
然后进行这2个文件的对比。

我的问题是,如果用Hashcode比较,在某些时候可以通过,比如生成和复制文件到CE的temp文件夹下。但是有些时候不成功,比如生成和复制文件到SD卡中。
大致的代码思路如下:


bytes = new byte[1];
rand.NextBytes(bytes);
newFile.Append(bytes[0], 2000000 + rand.Next(1000000, 2000000));

//ComputeHash from firstFile and get a byte[].
//System.Security.Cryptography.HashAlgorithm
FileStream fs1 = File.Open(firstFile);
String hash1 = String.Empty;
foreach (byte b in HashAlgorithm.ComputeHash(fs1)) hash1 += b.ToString("x2").ToLower();

//copy from firstFile to secondFile
fInfo.CopyTo(secondFile, true);

//ComputeHash from secondFile and get a byte[].
FileStream fs2 = File.Open(secondFile);
String hash = String.Empty;
foreach (byte b in HashAlgorithm.ComputeHash(fs2)) hash2 += b.ToString("x2").ToLower();

//compare two hash
if (!hash2.Equals(hash1))
{
//fail
}


可是另外写了一段代码,只是用简单的byte来一个一个比较。不论在哪个盘上,都是通过的。

private bool FileCompare(string file1Path, string file2Path)
{
//if two file are point to one file. it is same
if(file1Path == file2Path)
{
return true;
}

int file1byte = 0;
int file2byte = 0;

using(FileStream fs1 = new FileStream(file1Path, FileMode.Open),
fs2 = new FileStream(file2Path, FileMode.Open))
{
if(fs1.Length != fs2.Length)
{
fs1.Close();
fs2.Close();
return false;
}

do
{
//read each byte from each file
file1byte = fs1.ReadByte();
file2byte = fs2.ReadByte();
}
while ((file1byte == file2byte) && (file1byte != -1));

fs1.Close();
fs2.Close();

return ((file1byte - file2byte) == 0);
}
}


是什么导致hashcode的比较会失败?
另外,奇怪的是相同的代码在Windows Mobile6 或者是WinCE5 却不会出现问题。两个方式进行比较都是通过的。
...全文
97 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingmax54212008 2012-01-07
  • 打赏
  • 举报
回复
Binary比较即可
当我遇上-你 2012-01-04
  • 打赏
  • 举报
回复
BYTE 是正确的
91program 2012-01-04
  • 打赏
  • 举报
回复
字节比较是对的,只能说明是程序的问题
skylkj 2012-01-04
  • 打赏
  • 举报
回复


String hash = String.Empty;
foreach (byte b in HashAlgorithm.ComputeHash(fs2)) hash2 += b.ToString("x2").ToLower();

你这里上面申明的是hash不是hash2,你的hash2在哪里?全局的?那执行的时候就没有 = String.Empty;的初始化了
skylkj 2012-01-04
  • 打赏
  • 举报
回复
你先把hash1和hash2输出出来看下哪里不一样
内容概要:本文详细介绍了名为MoSca的系统,该系统旨在从单目随意拍摄的视频中重建和合成动态场景的新视角。MoSca通过4D Motion Scaffolds(运动支架)将视频数据转化为紧凑平滑编码的Motion Scaffold表示,并将场景几何和外观与变形场解耦,通过高斯融合进行优化。系统还解决了相机焦距和姿态的问题,无需额外的姿态估计工具。文章不仅提供了系统的理论背景,还给出了基于PyTorch的简化实现代码,涵盖MotionScaffold、GaussianFusion、MoScaSystem等核心组件。此外,文中深入探讨了ARAP变形模型、2D先验到3D的提升、动态高斯表示、相机参数估计等关键技术,并提出了完整的训练流程和性能优化技巧。 适用人群:具备一定计算机视觉和深度学习基础的研究人员和工程师,特别是对动态场景重建和新视角合成感兴趣的从业者。 使用场景及目标:①从单目视频中重建动态场景的新视角;②研究和实现基于4D Motion Scaffolds的动态场景表示方法;③探索如何利用预训练视觉模型的先验知识提升3D重建质量;④开发高效的动态场景渲染和优化算法。 其他说明:本文提供了详细的代码实现,包括简化版和深入扩展的技术细节。阅读者可以通过代码实践加深对MoSca系统的理解,并根据具体应用场景调整和扩展各个模块。此外,文中还强调了物理启发的正则化项和多模态先验融合的重要性,帮助实现更合理的变形和更高质量的渲染效果。

19,519

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧