zoukankan      html  css  js  c++  java
  • 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);//使用流方式获取
  • 相关阅读:
    Eclipse 重构功能的使用与重构快捷键
    Idea工具常用技巧总结
    Eclipse常用快捷键
    RabbitMQ的原理和使用
    总结消息队列RabbitMQ的基本用法
    rabbitmq常见运维命令和问题总结
    关于RabbitMQ关键性问题的总结
    Rabbit MQ 面试题相关
    RabbitMQ的使用总结
    史玉柱: 我的成功不是偶然(底下还有一堆相关链接)
  • 原文地址:https://www.cnblogs.com/wangjinming/p/4030204.html
Copyright © 2011-2022 走看看