当前位置: 首页 > 编程语言 > C#

C#MD5是一个示例Share

时间:2023-04-10 19:05:57 C#

C#MD5是一个示例我正在尝试复制一个文件,获取MD5哈希值,然后删除副本。我这样做是为了避免进程锁定由另一个应用程序编写的原始文件。但是,我正在锁定我复制的文件。File.Copy(pathSrc,pathDest,true);字符串md5Result;StringBuildersb=newStringBuilder();MD5md5Hasher=MD5.Create();使用(FileStreamfs=File.OpenRead(pathDest)){foreach(Bytebinmd5Hasher.ComputeHash(fs))sb.Append(b.ToString("x2").ToLower());}md5Result=sb.ToString();File.Delete(pathDest);然后我在File.Delete()'Got'Theprocesscannotaccessthefile'异常。我希望使用语句,文件流将很好地关闭。我还尝试单独声明文件流,删除使用,并在读取后放置fs.Close()和fs.Dispose()。这之后我把真正的md5计算注释掉了,代码删了,文件也删了,看来跟ComputeHash(fs)有点关系。我把你的代码放在控制台应用程序中并运行它没有错误,获取哈希并在执行结束时删除测试文件?我只是在我的测试应用程序中将.pdb用作文件。您运行的是什么版本的.NET?我在这里使用的是我正在处理的代码,如果您将它放在VS2008.NET3.5sp1的控制台应用程序中,它运行时不会出现错误(至少对我而言)。使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Security.Cryptography;使用System.IO;namespacelockTest{classProgram{staticvoidMain(string[]args){stringhash=GetHash("lockTest.pdb");Console.WriteLine("Hash:{0}",hash);控制台.ReadKey();}publicstaticstringGetHash(stringpathSrc){stringpathDest="copy_"+pathSrc;File.Copy(pathSrc,pathDest,true);字符串md5Result;StringBuildersb=newStringBuilder();MD5md5Hasher=MD5.Create();使用(FileStreamfs=File.OpenRead(pathDest)){foreach(Bytebinmd5Hasher.ComputeHash(fs))sb.Append(b.ToString("x2").ToLower());}md5Result=sb.ToString();File.Delete(pathDest);返回md5Result;}}}使用System.Security.Cryptography导入命名空间;这是返回md5哈希码的函数。您需要传递一个字符串作为参数。publicstaticstringGetMd5Hash(字符串输入){MD5md5Hash=MD5.Create();//将输入字符串转换为字节数组并计算hash.byte[]data=md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));//创建一个新的Stringbuilder来收集字节//并创建一个字符串。StringBuildersBuilder=newStringBuilder();//遍历散列数据的每个字节//并将每个字节格式化为十六进制字符串。for(inti=0;i您是否尝试过将MD5对象包装在using()中?从文档中可以看出,MD5是一次性的。这可能会使它丢弃文件。md5hasher.Clear()在您的循环可以做到这一点之后.有没有试过在删除文件前把md5Hasher设置为null可能有一个handle还附在FileStream上(可能是内存泄漏)为什么不用FileShare.ReadWrite打开文件呢以上是C#学习教程:C#MD5是所有分享内容的示例,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---本文收集自网络,不代表一个职位,如涉及侵权,请点击维权联系管理员删除。如需转载,请注明出处: