主頁(yè) > 知識(shí)庫(kù) > 一個(gè)簡(jiǎn)單的文件MD5碼自動(dòng)計(jì)算比較器(附源碼)

一個(gè)簡(jiǎn)單的文件MD5碼自動(dòng)計(jì)算比較器(附源碼)

熱門標(biāo)簽:玉林市機(jī)器人外呼系統(tǒng)哪家好 百度ai地圖標(biāo)注 合肥電銷外呼系統(tǒng)哪家公司做的好 電話機(jī)器人軟件銷售工作 預(yù)測(cè)式外呼系統(tǒng)使用說(shuō)明 蘋果手機(jī)凱立德地圖標(biāo)注 同安公安400電話怎么申請(qǐng)流程 南陽(yáng)外呼系統(tǒng)定制化 申請(qǐng)400電話手續(xù)

主要對(duì) 多線程更新 winform 不是特別清楚,繞來(lái)繞去,搞得很暈乎,主要代碼如下, 還請(qǐng)各位大俠多多指點(diǎn),謝謝!

復(fù)制代碼 代碼如下:

using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 using System.Security.Cryptography;
 using System.IO;
 using System.Threading;

 namespace FileMD5 {
     public partial class MainForm : Form {
         public MainForm() {
             InitializeComponent();
         }

         private void button_file_Click(object sender, EventArgs e) {
             OpenFileDialog fileDialog = new OpenFileDialog();
             fileDialog.Title = "請(qǐng)選擇文件";
             fileDialog.RestoreDirectory = true;

             if (fileDialog.ShowDialog() == DialogResult.OK) {
                 textBox_file.Text = fileDialog.FileName;
                 textBox_result.Text = "";
                 FileInfo file = new FileInfo(fileDialog.FileName);
                 fileSzie = file.Length;
                 showFilesize(fileSzie);
             }

         }

         private void button_exit_Click(object sender, EventArgs e) {
             this.Close();
             this.Dispose();
         }

         private void button_check_Click(object sender, EventArgs e) {
             checkResult();
         }

         MD5 md5 = (MD5)CryptoConfig.CreateFromName("MD5");
         long fileSzie = 0;

         private void button_calc_Click(object sender, EventArgs e) {
             string file = textBox_file.Text;

             if (file.Length == 0) {
                 textBox_result.Text = "請(qǐng)先重新選擇文件!";
                 return;
             }

             FileStream fs = null;
             try {
                 fs = new FileStream(file, FileMode.Open, FileAccess.Read);
             } catch (SystemException) {
                 textBox_result.Text = "文件打開錯(cuò)誤,請(qǐng)重新選擇文件!";
                 return;
             }

             //對(duì)于大于 100M 的文件啟用多線程
             if (fs.Length > 100L * 1024 * 1024) {

                 string message = "文件已經(jīng)超過(guò) 100M ,需要較長(zhǎng)的計(jì)算時(shí)間。\n軟件將啟動(dòng)后臺(tái)線程進(jìn)行處理。是否繼續(xù)?";
                 string caption = "文件較大";
                 MessageBoxButtons buttons = MessageBoxButtons.YesNo;

                 if (MessageBox.Show(message, caption, buttons) == System.Windows.Forms.DialogResult.No) {
                     fs.Close();
                     textBox_result.Text = "文件較大,未計(jì)算。";
                     return;
                 }
                 textBox_result.Text = "正在計(jì)算中,請(qǐng)稍候......";
                 button_calc.Enabled = false;
                 button_file.Enabled = false;

                 Thread thread = new Thread(new ParameterizedThreadStart(calcMD5));
                 thread.Start(fs);

             } else {
                 calcMD5(fs);
             }
         }

         //建立一個(gè) object 參數(shù)的函數(shù),是為了處理線程調(diào)用中,使用參數(shù)的問(wèn)題。
         private void calcMD5(object fs) {
             calcMD5((FileStream)fs);
         }

         // Invoke 函數(shù)需要使用的委托
         delegate void updateWindows(byte[] result);

         private void calcMD5(FileStream fs) {
             byte[] md5byte = md5.ComputeHash(fs);

             if (this.InvokeRequired) {
                 this.Invoke(new updateWindows(showResult), md5byte);
             } else {
                 showResult(md5byte);
             }
             fs.Close();
         }

         private void showResult(byte[] md5byte) {
             int i, j;
             StringBuilder sb = new StringBuilder(32);
             foreach (byte b in md5byte) {
                 i = Convert.ToInt32(b);
                 j = i >> 4;
                 sb.Append(Convert.ToString(j, 16));
                 j = ((i 4) 0x00ff) >> 4;
                 sb.Append(Convert.ToString(j, 16));
             }

             String result = sb.ToString().ToUpper();

             textBox_result.Text = result;
             button_calc.Enabled = true;
             button_file.Enabled = true;
             checkResult();

         }

         private void checkResult() {

             string result = textBox_result.Text;

             if (textBox_md5.Text.Length == 0) {
                 textBox_compare.Text = "";
                 textBox_compare.Visible = false;
                 return;
             }

             if(result.Length != 32 ) {
                 textBox_compare.Visible = true;
                 textBox_compare.BackColor = Color.Pink;
                 textBox_compare.Text = "計(jì)算結(jié)果框中不是MD5碼,請(qǐng)先進(jìn)行計(jì)算!";
                 return;
             }

             if (textBox_md5.Text.Trim().ToUpper().Equals(result.ToUpper())) {
                 textBox_compare.Visible = true;
                 textBox_compare.BackColor = Color.LightGreen;
                 textBox_compare.Text = "MD5碼 已匹配,文件未被修改,可放心使用!";
             } else {
                 textBox_compare.Visible = true;
                 textBox_compare.BackColor = Color.Red;
                 textBox_compare.Text = "MD5碼 不匹配,文件已被修改,請(qǐng)小心!";
             }
         }

         private void showFilesize(long size) {

             float d_size;
             string unit = "Byte";

             if (size > 1024 * 1024 * 1024) {    //大于 1G 的顯示
                 d_size = size / (float)(1024 * 1024 * 1024);
                 unit = "GB";
             } else {
                 if (size > 1024 * 1024) {    //大于 1M 的顯示
                     d_size = size / (float)(1024 * 1024);
                     unit = "MB";
                 } else {
                     if (size > 1024) {    //大于 1K 的顯示
                         d_size = size / (float)(1024);
                         unit = "KB";
                     } else {
                         d_size = size;
                     }
                 }
             }
             textBox_filesize.Text = string.Format(" {0:F} {1} ( {2:N0}字節(jié) )", d_size, unit, size);
         }
     }
 }

完整的 VS2010 項(xiàng)目下載:http://xiazai.jb51.net/201302/yuanma/FileMD5_jb51.net.rar

標(biāo)簽:嘉興 南京 淄博 海南 揚(yáng)州 南京 南昌 臺(tái)州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一個(gè)簡(jiǎn)單的文件MD5碼自動(dòng)計(jì)算比較器(附源碼)》,本文關(guān)鍵詞  一個(gè),簡(jiǎn)單,的,文件,MD5,碼,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《一個(gè)簡(jiǎn)單的文件MD5碼自動(dòng)計(jì)算比較器(附源碼)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于一個(gè)簡(jiǎn)單的文件MD5碼自動(dòng)計(jì)算比較器(附源碼)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章