winrt获取文件MD5码

//小文件
public static string ComputeMD5(byte[] bytes)
        {
            var alg = HashAlgorithmProvider.OpenAlgorithm("MD5");
            IBuffer buff = CryptographicBuffer.CreateFromByteArray(bytes);
            var hashed = alg.HashData(buff);
            var res = CryptographicBuffer.EncodeToHexString(hashed);
            return res;
        }
        public static byte[] StreamToBytes(Stream stream)
        {
            byte[] bytes = new byte[stream.Length];//这个地方会报内存不够,文件太大了
            stream.Read(bytes, 0, bytes.Length);
            return bytes;
        }
//大文件的话必须用数据流,不然会内存不够,一般大于50M的最好用流的形式比较好
        public static async Task<string> ComputeMD5(Stream stream)
        {
            var alg = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5);
            var inputStream = stream.AsInputStream();
            const uint capacity = 1000000000;//100M这个参数可以自己修改,根据自己的配置决定
            var buffer = new Windows.Storage.Streams.Buffer(capacity);
            var hash = alg.CreateHash();


            while (true)
            {
                await inputStream.ReadAsync(buffer, capacity, InputStreamOptions.None);
                if (buffer.Length > 0)
                    hash.Append(buffer);
                else
                    break;
            }
            string hashText = CryptographicBuffer.EncodeToHexString(hash.GetValueAndReset()).ToLower();
            
            return hashText;
        }

使用例子:
StorageFile MYFile = await KnownFolders.DocumentsLibrary.GetFileAsync("791d5b3b142c6ba114eecc12ac2ff751.mp4");
            Stream mystream = (await MYFile.OpenAsync(FileAccessMode.Read)).AsStream();
            string txt2 = ComputeMD5(StreamToBytes(mystream));//使用正常获取,可能报错
            string txt = await ComputeMD5(mystream);//使用流方式获取

 

转载于:https://www.cnblogs.com/wangjinming/p/4030204.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值