亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#根據文件大小顯示文件復制進度條實例

2020-01-24 02:57:31
字體:
來源:轉載
供稿:網友

初學者,照著書上的抄襲制作,但已經理解了里面的意思和應用,并且進行了稍微改善和異常捕捉。這里記錄下,以防以后用到這方面的知識點。

窗體設計:

code:

復制代碼 代碼如下:

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

namespace CopyProgress015
{
public partial class Form1 : Form
{
    public Form1()
    {
 InitializeComponent();
    }
    private Thread thdCopyFile; //創建一個線程
    private string str = "";  //用來記錄源文件的名字
    FileStream FormerOpenStream;  //實例化源文件FileStream類
    FileStream ToFileOpenStream;  //實例化目標文件FileStream類


    #region //復制文件 函數
    /// <summary>
    /// 復制文件
    /// </summary>
    /// <param name="FormerFile">源文件路徑</param>
    /// <param name="ToFile">目的文件路徑</param>
    /// <param name="TranSize">傳輸大小</param>
    /// <param name="progressBar1">ProgressBar控件</param>
    public void CopyFile(string FormerFile, string ToFile, int TranSize, ProgressBar progressBar1)
    {
 progressBar1.Value = 0;//設置進度條的當前位置為0
 progressBar1.Minimum = 0; //設置進度條的最小值為0

 try
 {
     FormerOpenStream = new FileStream(FormerFile, FileMode.Open, FileAccess.Read);//以只讀方式打開源文件
 }
 catch (IOException ex)
 {
     MessageBox.Show(ex.Message);
     return;
 }

 try
 {
     FileStream fileToCreate = new FileStream(ToFile, FileMode.Create); //創建目的文件,如果已存在將被覆蓋
     fileToCreate.Close();//關閉所有fileToCreate的資源
     fileToCreate.Dispose();//釋放所有fileToCreate的資源
 }
 catch(IOException ex)
 {
     MessageBox.Show(ex.Message);
     return;
 }


       ToFileOpenStream = new FileStream(ToFile, FileMode.Append, FileAccess.Write);//以寫方式打開目的文件


       int max = Convert.ToInt32(Math.Ceiling((Double)FormerOpenStream.Length / (Double)TranSize));//根據一次傳輸的大小,計算最大傳輸個數. Math.Ceiling 方法 (Double),返回大于或等于指定的雙精度浮點數的最小整數值。

 progressBar1.Maximum = max;//設置進度條的最大值
 int FileSize; //每次要拷貝的文件的大小
 if (TranSize < FormerOpenStream.Length)  //如果分段拷貝,即每次拷貝內容小于文件總長度
 {
     byte[] buffer = new byte[TranSize]; //根據傳輸的大小,定義一個字節數組,用來存儲傳輸的字節
     int copied = 0;//記錄傳輸的大小
     int tem_n = 1;//設置進度欄中進度的增加個數
     while (copied <= ((int)FormerOpenStream.Length - TranSize))
     {
  FileSize = FormerOpenStream.Read(buffer, 0, TranSize);//從0開始讀到buffer字節數組中,每次最大讀TranSize
  FormerOpenStream.Flush();   //清空緩存
  ToFileOpenStream.Write(buffer, 0, TranSize); //向目的文件寫入字節
  ToFileOpenStream.Flush();//清空緩存
  ToFileOpenStream.Position = FormerOpenStream.Position; //是源文件的目的文件流的位置相同
  copied += FileSize; //記錄已經拷貝的大小
  progressBar1.Value = progressBar1.Value + tem_n; //增加進度欄的進度塊
     }
     int leftSize = (int)FormerOpenStream.Length - copied; //獲取剩余文件的大小
     FileSize = FormerOpenStream.Read(buffer, 0, leftSize); //讀取剩余的字節
     FormerOpenStream.Flush();
     ToFileOpenStream.Write(buffer, 0, leftSize); //寫入剩余的部分
     ToFileOpenStream.Flush();
 }
 else //如果整體拷貝,即每次拷貝內容大于文件總長度
 {
     byte[] buffer = new byte[FormerOpenStream.Length];
     FormerOpenStream.Read(buffer, 0, (int)FormerOpenStream.Length);
     FormerOpenStream.Flush();
     ToFileOpenStream.Write(buffer, 0, (int)FormerOpenStream.Length);
     ToFileOpenStream.Flush();

 }
 FormerOpenStream.Close();
 ToFileOpenStream.Close();
 if (MessageBox.Show("copy finished") == DialogResult.OK)
 {
     progressBar1.Value = 0;
     txtOriginalFile.Clear();
     txtCopyFile.Clear();
     str = "";

 }

    }

    #endregion

 

    public delegate void CopyFile_Delegate(); //定義委托/托管線程
    /// <summary>
    /// 在線程上執行委托(設置托管線程函數)
    /// </summary>
    public void SetCopyFile()
    {
 //this.Invoke(new CopyFile_Delegate(RunCopyFile)); //對指定的線程進行托管
 //下面兩行代碼等同上面一行代碼
 CopyFile_Delegate copyfile_delegate = new CopyFile_Delegate(RunCopyFile); //創建delegate對象
 this.Invoke(copyfile_delegate); //調用delegate           
    }


    /// <summary>
    /// 設置線程,運行copy文件,它與代理CopyFile_Delegate應具有相同的參數和返回類型
    /// </summary>
    public void RunCopyFile()
    {
 CopyFile(txtOriginalFile.Text, txtCopyFile.Text + "http://" + str, 1024, progressBar1); //復制文件
 Thread.Sleep(0); //避免假死
 thdCopyFile.Abort();  //關閉線程

    }


    private void btnOriginalFile_Click(object sender, EventArgs e)
    {
 if (openFileDialog1.ShowDialog() == DialogResult.OK)  //打開文件對話框
 {
     txtOriginalFile.Text = openFileDialog1.FileName;  //獲取源文件的路徑
 }

    }

    private void btnCopyFile_Click(object sender, EventArgs e)
    {
 if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
 {
     txtCopyFile.Text = folderBrowserDialog1.SelectedPath;//獲取目的文件的路徑              
 }
    }


    private void btnBeginToCopy_Click(object sender, EventArgs e)
    {                   

 if (txtOriginalFile.Text.Trim() == string.Empty)
 {
     MessageBox.Show("OriginalFile cannot be empty!");
     return;

 }
 else
 {
     str = txtOriginalFile.Text;//記錄源文件的路徑
     str = str.Substring(str.LastIndexOf('//') + 1, str.Length - str.LastIndexOf('//') - 1); //獲取源文件的名稱
 }


 if (txtCopyFile.Text.Trim() == string.Empty)
 {
     MessageBox.Show("The Copyfile path cannot be empty!");
     return;
 }
 else
 {
     thdCopyFile = new Thread(new ThreadStart(SetCopyFile));
     thdCopyFile.Start();
 }            

    }


    /// <summary>
    /// 給textbox增加tooltip
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void txtOriginalFile_MouseHover(object sender, EventArgs e)
    {
 ToolTip tooltip = new ToolTip();
 if (txtOriginalFile.Text.Trim() != string.Empty)
 {

     tooltip.Show(txtOriginalFile.Text, txtOriginalFile);
 }
 else
 {
     tooltip.Hide(txtOriginalFile);
 }

    }
    /// <summary>
    /// 給textbox增加tooltip
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void txtCopyFile_MouseHover(object sender, EventArgs e)
    {
 ToolTip tooltip = new ToolTip();
 if (txtCopyFile.Text.Trim() != string.Empty)
 {

     tooltip.Show(txtCopyFile.Text, txtCopyFile);
 }
 else
 {
     tooltip.Hide(txtCopyFile);
 }

    }

}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲久久久久久久久久| 欧洲永久精品大片ww免费漫画| 国产午夜精品全部视频在线播放| 国产欧美一区二区白浆黑人| 久久精品国产亚洲7777| 色综合久久久888| 国产日韩在线亚洲字幕中文| 精品电影在线观看| 日韩在线视频一区| 亚洲精品综合精品自拍| 国产欧美精品xxxx另类| 国产亚洲精品久久久久动| 亚洲第一色在线| 国产香蕉一区二区三区在线视频| 另类专区欧美制服同性| 亚洲人成电影网站色…| 一本大道久久加勒比香蕉| 亚洲精品videossex少妇| 国产在线999| 青青草成人在线| 欧美在线免费观看| 亚洲一区二区三区777| 福利视频导航一区| 国产精品激情自拍| 欧美视频一二三| 亚洲国产精品va在看黑人| 精品久久久久久国产| 久久精品成人欧美大片古装| 亚洲在线第一页| 国产91久久婷婷一区二区| 亚洲成年人在线| 国产亚洲一区二区精品| 亚洲成色www8888| 欧美激情亚洲另类| 国产精品av在线播放| 亚洲欧洲一区二区三区久久| 国产成人在线播放| 久久久久久久一区二区| 日韩人在线观看| 欧美人与物videos| 国产精品久久久久7777婷婷| 日本一区二区三区四区视频| 成人妇女免费播放久久久| 久久天天躁狠狠躁夜夜躁| 国产精品久久久久久久一区探花| www.欧美三级电影.com| 中文字幕精品—区二区| 欧美国产日本在线| 国产91精品网站| 久久久久久久久国产| 亚洲黄色www网站| 中文字幕日韩欧美精品在线观看| 欧美日韩亚洲91| 久久久久久久网站| 在线成人中文字幕| 久久久这里只有精品视频| 欧美激情第6页| 亚洲欧洲一区二区三区在线观看| 精品日韩中文字幕| 91香蕉亚洲精品| 欧美色视频日本高清在线观看| 色香阁99久久精品久久久| 亚洲国产精品小视频| 成人免费xxxxx在线观看| 九九视频直播综合网| 在线看欧美日韩| 奇米四色中文综合久久| 狠狠久久亚洲欧美专区| 青青久久av北条麻妃黑人| 日韩精品欧美国产精品忘忧草| 亚洲毛片在线观看.| 成人精品网站在线观看| 国产精品吊钟奶在线| 国产精品福利无圣光在线一区| 日韩在线观看免费av| 91精品视频播放| 日韩激情第一页| 色中色综合影院手机版在线观看| 欧美精品999| 欧美乱人伦中文字幕在线| 最新国产精品拍自在线播放| 另类美女黄大片| 亚洲电影免费观看高清完整版在线| 在线日韩精品视频| 91精品国产高清久久久久久久久| 国产欧美日韩免费| 国产激情999| www高清在线视频日韩欧美| 久久国产精彩视频| 91精品在线一区| 国产精品永久免费观看| 亚洲欧美制服中文字幕| 成人黄色av网站| 国产精品99久久久久久人| 亚洲视频一区二区三区| 狠狠躁夜夜躁人人躁婷婷91| 亚洲人成网站在线播| 亚洲第一福利网| 精品久久久在线观看| 日韩最新av在线| 尤物九九久久国产精品的分类| 欧美亚洲伦理www| 国内免费久久久久久久久久久| 91av在线免费观看| 亚洲а∨天堂久久精品喷水| 亚洲娇小xxxx欧美娇小| 国产精品久久久久久亚洲影视| 久久人人爽人人爽人人片av高清| 欧美激情在线观看| 91九色视频导航| 久久精品青青大伊人av| 日韩精品丝袜在线| 日韩精品免费在线观看| 亚洲free性xxxx护士白浆| 国产精品一区二区三区成人| 欧美成人午夜免费视在线看片| 国内外成人免费激情在线视频网站| 欧美日韩国产一区在线| 韩日精品中文字幕| 国产在线视频2019最新视频| 国产视频精品免费播放| 欧美精品999| 久久精品99久久久久久久久| 91精品视频在线免费观看| 成人免费视频xnxx.com| 欧美成人精品在线| 国产成人一区二区在线| 日韩在线视频观看正片免费网站| 亚洲电影免费观看高清完整版在线观看| 欧美日韩国产第一页| 欧美日产国产成人免费图片| 欧美三级免费观看| 亚洲欧洲成视频免费观看| 粉嫩老牛aⅴ一区二区三区| 精品无人区太爽高潮在线播放| 欧美激情一级二级| 久久成人精品视频| 国产啪精品视频网站| 日韩中文有码在线视频| 不卡在线观看电视剧完整版| 久久777国产线看观看精品| 欧美剧在线观看| 亚洲成色999久久网站| 亚洲欧美国产一本综合首页| 亚洲伊人第一页| 中文字幕久久久av一区| 亚洲最大在线视频| 日韩在线高清视频| 日韩成人av在线| 欧美精品亚州精品| 高清欧美性猛交xxxx| 久久五月天色综合| 国产精品久久av| 欧美日韩成人在线视频| 神马久久久久久| 欧美亚洲国产日韩2020| 亚洲美女av在线播放| 黑人巨大精品欧美一区二区免费| 欧美视频在线观看免费| 国内偷自视频区视频综合| 91日本在线视频| 国产精品入口尤物| 亚洲国产精品人久久电影| 国产精品久久久久久久一区探花|