Creating hash for folder

后端 未结 7 1157
梦谈多话
梦谈多话 2020-12-13 05:05

i need to create hash for folder, that contains some files. I already done this task for each of files, but i searching the way to create one hash for all files in folder.

7条回答
  •  一个人的身影
    2020-12-13 05:43

    Dunc's answer works well; however, it does not handle an empty directory. The code below returns the MD5 'd41d8cd98f00b204e9800998ecf8427e' (the MD5 for a 0 length character stream) for an empty directory.

    public static string CreateDirectoryMd5(string srcPath)
    {
        var filePaths = Directory.GetFiles(srcPath, "*", SearchOption.AllDirectories).OrderBy(p => p).ToArray();
    
        using (var md5 = MD5.Create())
        {
            foreach (var filePath in filePaths)
            {
                // hash path
                byte[] pathBytes = Encoding.UTF8.GetBytes(filePath);
                md5.TransformBlock(pathBytes, 0, pathBytes.Length, pathBytes, 0);
    
                // hash contents
                byte[] contentBytes = File.ReadAllBytes(filePath);
    
                md5.TransformBlock(contentBytes, 0, contentBytes.Length, contentBytes, 0);
            }
    
            //Handles empty filePaths case
            md5.TransformFinalBlock(new byte[0], 0, 0);
    
            return BitConverter.ToString(md5.Hash).Replace("-", "").ToLower();
        }
    }
    

提交回复
热议问题