遍历文件夹,计算文件MD5

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace test
{
    class Program
    {
        static FileStream fs;
        static StreamWriter sw;

        static void Main(string[] args)
        {
            DeleteFile("E:\\A.txt");
            fs= new FileStream("E:\\A.txt",FileMode.Create);
            sw= new StreamWriter(fs,Encoding.Default);
            FindFoldersAndFiles(@"E:\Program Files");
            sw.Close();
            fs.Close();
        }

        //递归目标文件夹中的所有文件和文件夹
        private static void FindFoldersAndFiles(string path)
        {
            //Console.WriteLine("文件夹" + path);
            sw.WriteLine(path);
            //遍历目标文件夹的所有文件
            foreach (string fileName in Directory.GetFiles(path))
            {
                //Console.WriteLine("┣" + fileName);
                sw.WriteLine(fileName + " " + GetMD5HashFromFile(fileName));
            }

            //遍历目标文件夹的所有文件夹
            foreach (string directory in Directory.GetDirectories(path))
            {
                FindFoldersAndFiles(directory);
            }
        }

        private static string GetMD5HashFromFile(string fileName)
        {
             FileStream file = new FileStream(fileName, FileMode.Open);
             System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
             byte[] retVal = md5.ComputeHash(file);
             file.Close();
 
            StringBuilder sb = new StringBuilder();
             for (int i = 0; i < retVal.Length; i++)
             {
                sb.Append(retVal[i].ToString("x2"));
             }
             return sb.ToString();
         }

        private static bool DeleteFile(string path)
        {
            if (File.Exists(path))
            {
                //如果存在则删除
                File.Delete(path);
                return true;
            }
            return false;
        }
    }
}
 

你可能感兴趣的:(Code)