同一台机器,有很多相同名字的文件,如何判断它就是它?
例如文件A从路径1移动到路径2,我怎么知道它就是文件A?

解决方案 »

  1.   

    顶楼上,还可以用其他hash算法。
      

  2.   


                using(FileStream fs = new FileStream(@"test.dat",FileMode.Open,FileAccess.Read))
                {
                    MD5 md5 = MD5.Create();
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    string code = BitConverter.ToString(md5.ComputeHash(buffer));
                }
      

  3.   

    md5是判断文件有否被改动,lz想要的应该是即使被改也能追踪到吧?
    filewatch才是正解??
      

  4.   

    public class MD5FielCompare
    {    /// <summary>
        /// 计算文件的 MD5 值
        /// </summary>
        /// <param name="fileName">要计算 MD5 值的文件名和路径</param>
        /// <returns>MD5 值16进制字符串</returns>
        public static string MD5File(string fileName)
        {
            return HashFile(fileName, "md5");
        }    /// <summary>
        /// 计算文件的哈希值
        /// </summary>
        /// <param name="fileName">要计算哈希值的文件名和路径</param>
        /// <param name="algName">算法:sha1,md5</param>
        /// <returns>哈希值16进制字符串</returns>
        public static string HashFile(string fileName, string algName)
        {
            if (!System.IO.File.Exists(fileName))
                return string.Empty;        FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            byte[] hashBytes = HashData(fs, algName);
            fs.Close();
            return ByteArrayToHexString(hashBytes);
        }    /// <summary>
        /// 计算哈希值
        /// </summary>
        /// <param name="stream">要计算哈希值的 Stream</param>
        /// <param name="algName">算法:sha1,md5</param>
        /// <returns>哈希值字节数组</returns>
        public static byte[] HashData(Stream stream, string algName)
        {
            HashAlgorithm algorithm;
            if (algName == null)
            {
                throw new ArgumentNullException("algName 不能为 null");
            }
            if (string.Compare(algName, "sha1", true) == 0)
            {
                algorithm = SHA1.Create();
            }
            else
            {
                if (string.Compare(algName, "md5", true) != 0)
                {
                    throw new Exception("algName 只能使用 sha1 或 md5");
                }
                algorithm = MD5.Create();
            }
            return algorithm.ComputeHash(stream);
        }    /// <summary>
        /// 字节数组转换为16进制表示的字符串
        /// </summary>
        public static string ByteArrayToHexString(byte[] data)
        {
            StringBuilder sb = new StringBuilder(data.Length * 3);        foreach (byte b in data)            sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));        return sb.ToString().ToUpper();    }    //判断两个文件是否相同
        public static bool isSameFile(string sourceFile, string destFile)
        {
            if (!File.Exists(destFile))
            {
                return false;
            }
            string source_md5 = MD5File(sourceFile);
            string dest_md5 = MD5File(destFile);
            if (source_md5 == dest_md5)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
      

  5.   

    FileStream fs = new FileStream(@"", FileMode.Open);
                MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
                md5.Initialize();
                byte[] bytes = md5.ComputeHash(fs);
                md5.Clear();
                fs.Close();
                MessageBox.Show(Utils.ByteToString(bytes));