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

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

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

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

窗體設計:

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


    #region //復制文件 函數(shù)
    /// <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); //創(chuàng)建目的文件,如果已存在將被覆蓋
     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));//根據(jù)一次傳輸?shù)拇笮。嬎阕畲髠鬏攤€數(shù). Math.Ceiling 方法 (Double),返回大于或等于指定的雙精度浮點數(shù)的最小整數(shù)值。

 progressBar1.Maximum = max;//設置進度條的最大值
 int FileSize; //每次要拷貝的文件的大小
 if (TranSize < FormerOpenStream.Length)  //如果分段拷貝,即每次拷貝內容小于文件總長度
 {
     byte[] buffer = new byte[TranSize]; //根據(jù)傳輸?shù)拇笮?,定義一個字節(jié)數(shù)組,用來存儲傳輸?shù)淖止?jié)
     int copied = 0;//記錄傳輸?shù)拇笮?BR>     int tem_n = 1;//設置進度欄中進度的增加個數(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; //記錄已經拷貝的大小
  progressBar1.Value = progressBar1.Value + tem_n; //增加進度欄的進度塊
     }
     int leftSize = (int)FormerOpenStream.Length - copied; //獲取剩余文件的大小
     FileSize = FormerOpenStream.Read(buffer, 0, leftSize); //讀取剩余的字節(jié)
     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>
    /// 在線程上執(zhí)行委托(設置托管線程函數(shù))
    /// </summary>
    public void SetCopyFile()
    {
 //this.Invoke(new CopyFile_Delegate(RunCopyFile)); //對指定的線程進行托管
 //下面兩行代碼等同上面一行代碼
 CopyFile_Delegate copyfile_delegate = new CopyFile_Delegate(RunCopyFile); //創(chuàng)建delegate對象
 this.Invoke(copyfile_delegate); //調用delegate           
    }


    /// <summary>
    /// 設置線程,運行copy文件,它與代理CopyFile_Delegate應具有相同的參數(shù)和返回類型
    /// </summary>
    public void RunCopyFile()
    {
 CopyFile(txtOriginalFile.Text, txtCopyFile.Text + "\\" + 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);
 }

    }

}
}

相關文章

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

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

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

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

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

    Unity如何獲取Texture內存大小方法詳解

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

    C#程序中session值的保存方法以及轉為字符串的方法總結

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

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

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

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

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

    C#如何獲取計算機信息

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

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

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

    淺析WPF中控件拖拽與拖動的實現(xiàn)

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

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

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

最新評論

沁水县| 珲春市| 庐江县| 福安市| 宁安市| 卓尼县| 满城县| 化州市| 乌鲁木齐县| 西乌珠穆沁旗| 宁河县| 南乐县| 会东县| 屏边| 京山县| 新平| 东乌| 长治县| 通化市| 聊城市| 镇平县| 连城县| 中牟县| 鄢陵县| 沈阳市| 思茅市| 屏东县| 富平县| 昭通市| 洛隆县| 宜春市| 绥芬河市| 乾安县| 广东省| 涞源县| 峨眉山市| 边坝县| 明光市| 玉树县| 罗江县| 呼图壁县|