a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > 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);
 }

    }

}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 再深点灬舒服灬太大了添少妇视频 | 一级免费电影 | 韩国久久 | 91黄色在线观看 | 在线色综合| 欧美一区二区在线免费观看 | 亚洲成人久久久 | www.欧美日韩| 超碰网址 | 久久人人爽人人爽 | 精品在线播放 | 成人精品国产免费网站 | 在线色网站 | 欧美一区精品 | 日韩在线一区二区三区 | 欧美精品一区视频 | 狠狠综合 | av四虎| 99精品一区二区 | 欧美成人精品一区二区男人看 | 欧美三级欧美成人高清www | 综合久久一区二区三区 | 国产精品久久久久久久久久久久冷 | 欧美一区二区人人喊爽 | 亚洲一区中文字幕在线观看 | 国产suv精品一区二区六 | 欧美成人精品一区二区三区 | 瑟瑟视频在线看 | 视频羞羞 | 久久国产精品无码网站 | 国产欧美日韩综合精品一区二区 | 精品视频在线免费观看 | 日韩欧美一区二区视频 | 91精品国产乱码久久久久久久久 | 污网站免费在线 | 久国久产久精永久网页 | 区一区二免费视频 | 中文字幕久久久 | 精品视频在线免费观看 | 国产精品视频久久 | 国产丝袜人妖ts黄檬 |