最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#根據(jù)文件大小顯示文件復(fù)制進(jìn)度條實(shí)例

 更新時(shí)間:2013年12月31日 15:54:45   作者:  
這篇文章主要介紹了c#根據(jù)文件大小顯示文件復(fù)制進(jìn)度條實(shí)例,有需要的朋友可以參考一下

初學(xué)者,照著書上的抄襲制作,但已經(jīng)理解了里面的意思和應(yīng)用,并且進(jìn)行了稍微改善和異常捕捉。這里記錄下,以防以后用到這方面的知識(shí)點(diǎn)。

窗體設(shè)計(jì):

code:

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

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; //創(chuàng)建一個(gè)線程
    private string str = "";  //用來記錄源文件的名字
    FileStream FormerOpenStream;  //實(shí)例化源文件FileStream類
    FileStream ToFileOpenStream;  //實(shí)例化目標(biāo)文件FileStream類


    #region //復(fù)制文件 函數(shù)
    /// <summary>
    /// 復(fù)制文件
    /// </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;//設(shè)置進(jìn)度條的當(dāng)前位置為0
 progressBar1.Minimum = 0; //設(shè)置進(jìn)度條的最小值為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); //創(chuàng)建目的文件,如果已存在將被覆蓋
     fileToCreate.Close();//關(guān)閉所有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));//根據(jù)一次傳輸?shù)拇笮?,?jì)算最大傳輸個(gè)數(shù). Math.Ceiling 方法 (Double),返回大于或等于指定的雙精度浮點(diǎn)數(shù)的最小整數(shù)值。

 progressBar1.Maximum = max;//設(shè)置進(jìn)度條的最大值
 int FileSize; //每次要拷貝的文件的大小
 if (TranSize < FormerOpenStream.Length)  //如果分段拷貝,即每次拷貝內(nèi)容小于文件總長(zhǎng)度
 {
     byte[] buffer = new byte[TranSize]; //根據(jù)傳輸?shù)拇笮?,定義一個(gè)字節(jié)數(shù)組,用來存儲(chǔ)傳輸?shù)淖止?jié)
     int copied = 0;//記錄傳輸?shù)拇笮?BR>     int tem_n = 1;//設(shè)置進(jìn)度欄中進(jìn)度的增加個(gè)數(shù)
     while (copied <= ((int)FormerOpenStream.Length - TranSize))
     {
  FileSize = FormerOpenStream.Read(buffer, 0, TranSize);//從0開始讀到buffer字節(jié)數(shù)組中,每次最大讀TranSize
  FormerOpenStream.Flush();   //清空緩存
  ToFileOpenStream.Write(buffer, 0, TranSize); //向目的文件寫入字節(jié)
  ToFileOpenStream.Flush();//清空緩存
  ToFileOpenStream.Position = FormerOpenStream.Position; //是源文件的目的文件流的位置相同
  copied += FileSize; //記錄已經(jīng)拷貝的大小
  progressBar1.Value = progressBar1.Value + tem_n; //增加進(jìn)度欄的進(jìn)度塊
     }
     int leftSize = (int)FormerOpenStream.Length - copied; //獲取剩余文件的大小
     FileSize = FormerOpenStream.Read(buffer, 0, leftSize); //讀取剩余的字節(jié)
     FormerOpenStream.Flush();
     ToFileOpenStream.Write(buffer, 0, leftSize); //寫入剩余的部分
     ToFileOpenStream.Flush();
 }
 else //如果整體拷貝,即每次拷貝內(nèi)容大于文件總長(zhǎng)度
 {
     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>
    /// 在線程上執(zhí)行委托(設(shè)置托管線程函數(shù))
    /// </summary>
    public void SetCopyFile()
    {
 //this.Invoke(new CopyFile_Delegate(RunCopyFile)); //對(duì)指定的線程進(jìn)行托管
 //下面兩行代碼等同上面一行代碼
 CopyFile_Delegate copyfile_delegate = new CopyFile_Delegate(RunCopyFile); //創(chuàng)建delegate對(duì)象
 this.Invoke(copyfile_delegate); //調(diào)用delegate           
    }


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

    }


    private void btnOriginalFile_Click(object sender, EventArgs e)
    {
 if (openFileDialog1.ShowDialog() == DialogResult.OK)  //打開文件對(duì)話框
 {
     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);
 }

    }

}
}

相關(guān)文章

  • c#異步操作async?await狀態(tài)機(jī)的總結(jié)(推薦)

    c#異步操作async?await狀態(tài)機(jī)的總結(jié)(推薦)

    這篇文章主要介紹了c#異步操作async?await狀態(tài)機(jī)的總結(jié),關(guān)于async和await每個(gè)人都有自己的理解,甚至關(guān)于異步和同步亦或者關(guān)于異步和多線程每個(gè)人也都有自己的理解,本文通過實(shí)例代碼詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • C#獲取Excel文件所有文本數(shù)據(jù)內(nèi)容的示例代碼

    C#獲取Excel文件所有文本數(shù)據(jù)內(nèi)容的示例代碼

    獲取上傳的?EXCEL?文件的所有文本信息并存儲(chǔ)到數(shù)據(jù)庫(kù)里,可以進(jìn)一步實(shí)現(xiàn)對(duì)文件內(nèi)容資料關(guān)鍵字查詢的全文檢索,有助于我們定位相關(guān)文檔,本文詳細(xì)介紹了C#獲取Excel文件所有文本數(shù)據(jù)內(nèi)容實(shí)現(xiàn)步驟和代碼,需要的朋友可以參考下
    2024-07-07
  • Unity如何獲取Texture內(nèi)存大小方法詳解

    Unity如何獲取Texture內(nèi)存大小方法詳解

    這篇文章主要為大家介紹了Unity如何獲取Texture內(nèi)存大小方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C#程序中session值的保存方法以及轉(zhuǎn)為字符串的方法總結(jié)

    C#程序中session值的保存方法以及轉(zhuǎn)為字符串的方法總結(jié)

    這篇文章主要介紹了C#程序中session值的保存方法以及轉(zhuǎn)為字符串的方法總結(jié),經(jīng)常被用于ASP.NET網(wǎng)絡(luò)編程項(xiàng)目中,需要的朋友可以參考下
    2016-04-04
  • C#基于自定義事件EventArgs實(shí)現(xiàn)發(fā)布訂閱模式

    C#基于自定義事件EventArgs實(shí)現(xiàn)發(fā)布訂閱模式

    這篇文章介紹了C#基于自定義事件EventArgs實(shí)現(xiàn)發(fā)布訂閱模式的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • WCF分布式開發(fā)之MSMQ消息隊(duì)列

    WCF分布式開發(fā)之MSMQ消息隊(duì)列

    這篇文章介紹了WCF分布式開發(fā)之MSMQ消息隊(duì)列,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#如何獲取計(jì)算機(jī)信息

    C#如何獲取計(jì)算機(jī)信息

    這篇文章主要為大家詳細(xì)介紹了C#獲取計(jì)算機(jī)信息的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C#打印PDF文檔的10種方法(小結(jié))

    C#打印PDF文檔的10種方法(小結(jié))

    這篇文章主要介紹了C#打印PDF文檔的10種方法(小結(jié)),可分多種情況來進(jìn)行,如設(shè)置靜默打印、指定打印頁(yè)碼范圍和打印紙張大小、雙面打印、黑白打印等等,一共分成10種等,感興趣的可以了解一下
    2019-04-04
  • 淺析WPF中控件拖拽與拖動(dòng)的實(shí)現(xiàn)

    淺析WPF中控件拖拽與拖動(dòng)的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何在WPF中實(shí)現(xiàn)控件拖拽與拖動(dòng)的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • 如何使用C#代碼創(chuàng)建快捷方式文件詳解

    如何使用C#代碼創(chuàng)建快捷方式文件詳解

    在Windows中創(chuàng)建快捷方式很簡(jiǎn)單,如果想用C#代碼的方式創(chuàng)建,就沒有那么方便了,因?yàn)?NET框架沒有提供直接創(chuàng)建快捷方式的方法。這篇文章主要給大家介紹了關(guān)于如何使用C#代碼創(chuàng)建快捷方式文件的相關(guān)資料,需要的朋友可以參考下
    2018-08-08

最新評(píng)論

邵阳县| 浑源县| 巫溪县| 南江县| 缙云县| 巩义市| 六安市| 宜城市| 昌图县| 九寨沟县| 龙海市| 南昌县| 图木舒克市| 瑞安市| 灵宝市| 府谷县| 中山市| 治多县| 彰武县| 工布江达县| 泰兴市| 车险| 云和县| 沐川县| 九江市| 海阳市| 岢岚县| 米脂县| 伊川县| 桃园县| 朝阳市| 麻城市| 扎兰屯市| 赤水市| 青河县| 长宁县| 泽库县| 抚顺市| 电白县| 虹口区| 高陵县|