C# 下载后的文件MD5值不一样
stringserverurl=服务器地址;longfbytes;WebRequestwr_request=WebRequest.Create(serverurl);We...
string serverurl =服务器地址;
long fbytes;
WebRequest wr_request = WebRequest.Create(serverurl);
WebResponse wr_response = wr_request.GetResponse();
fbytes = wr_response.ContentLength;//获取文件的字节数
WebClient web = new WebClient();
//以数组形式下载
web.DownloadData(new Uri(serverurl));
Stream strm = web.OpenRead(new Uri(serverurl));
StreamReader reader = new StreamReader(strm);
byte[] mbyte = new byte[fbytes];
int allmybyte = (int)mbyte.Length;
int startmbyte = 0;
while (fbytes > 0)
{
int m = strm.Read(mbyte, startmbyte, allmybyte);
if (m == 0) break;
startmbyte += m;
allmybyte -= m;
probar.Value += m;
}
FileStream fstrm = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
fstrm.Write(mbyte, 0, startmbyte);
strm.Close();
fstrm.Close();
这样下载完的文件 字节数是一样的 文件是完整的
但是校验MD5值时却不一样,不能验证文件的完整性?
//获取MD5的方法
public static string md5_hash(string path)
{
try
{
FileStream get_file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
System.Security.Cryptography.MD5CryptoServiceProvider get_md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hash_byte = get_md5.ComputeHash(get_file);
string resule = System.BitConverter.ToString(hash_byte);
resule = resule.Replace("-", "");
return resule;
}
catch (Exception e)
{
return e.ToString();
}
}
如果我用web.DownloadFileAsync(serverurl)异步下载文件的话
下载后文件不完整,用web.DownloadFile(serverurl)下载的话会阻塞线程
因为我要可以看到下载进度的所以阻塞进程不好
请问用什么方法下载文件既能完整又能不阻塞线程并且文件能够校验完整性?
请诸位大侠帮帮忙。。。。 是WinForm程序
分不够还可以再加 在线等 展开
long fbytes;
WebRequest wr_request = WebRequest.Create(serverurl);
WebResponse wr_response = wr_request.GetResponse();
fbytes = wr_response.ContentLength;//获取文件的字节数
WebClient web = new WebClient();
//以数组形式下载
web.DownloadData(new Uri(serverurl));
Stream strm = web.OpenRead(new Uri(serverurl));
StreamReader reader = new StreamReader(strm);
byte[] mbyte = new byte[fbytes];
int allmybyte = (int)mbyte.Length;
int startmbyte = 0;
while (fbytes > 0)
{
int m = strm.Read(mbyte, startmbyte, allmybyte);
if (m == 0) break;
startmbyte += m;
allmybyte -= m;
probar.Value += m;
}
FileStream fstrm = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
fstrm.Write(mbyte, 0, startmbyte);
strm.Close();
fstrm.Close();
这样下载完的文件 字节数是一样的 文件是完整的
但是校验MD5值时却不一样,不能验证文件的完整性?
//获取MD5的方法
public static string md5_hash(string path)
{
try
{
FileStream get_file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
System.Security.Cryptography.MD5CryptoServiceProvider get_md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hash_byte = get_md5.ComputeHash(get_file);
string resule = System.BitConverter.ToString(hash_byte);
resule = resule.Replace("-", "");
return resule;
}
catch (Exception e)
{
return e.ToString();
}
}
如果我用web.DownloadFileAsync(serverurl)异步下载文件的话
下载后文件不完整,用web.DownloadFile(serverurl)下载的话会阻塞线程
因为我要可以看到下载进度的所以阻塞进程不好
请问用什么方法下载文件既能完整又能不阻塞线程并且文件能够校验完整性?
请诸位大侠帮帮忙。。。。 是WinForm程序
分不够还可以再加 在线等 展开
若以下回答无法解决问题,邀请你更新回答
3个回答
展开全部
web.DownloadFileAsync(serverurl)
没有问题
应该是你保存编码的问题
没有问题
应该是你保存编码的问题
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这写的啥东西啊,你到底是用WebRequest还是WebClient啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两个加密的结果是相同的,如果出现不同可能是你的encodint可能不一样,都换成acsii试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询