當前位置:
首頁 >
Winform中实现批量文件复制(附代码下载)
發布時間:2025/3/19
19
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Winform中实现批量文件复制(附代码下载)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景
效果
?
將要批量復制的文件拖拽到窗體中,然后點擊下邊選擇目標文件夾,然后點擊復制按鈕。
?
注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
新建一個窗體,布局設計如下
上面是一個ListView,下面是TextBox和兩個Button,然后添加一個路徑選擇控件。
?
在窗體的load事件中對ListView進行樣式設置
?private void Form1_Load(object sender, EventArgs e){listView1.GridLines = true;//在各數據之間形成網格線listView1.View = View.Details;//顯示列名稱listView1.FullRowSelect = true;//在單擊某項時,對其進行選中listView1.HeaderStyle = ColumnHeaderStyle.Nonclickable;//隱藏列標題listView1.Columns.Add("文件路徑", listView1.Width - 5, HorizontalAlignment.Right);}然后編寫listView的脫拽事件,使其能獲取到拖拽文件并顯示
private void listView1_DragEnter(object sender, DragEventArgs e){e.Effect = DragDropEffects.Copy;???????//設置拖放操作中目標放置類型為復制String[] str_Drop = (String[])e.Data.GetData(DataFormats.FileDrop, true);//檢索數據格式相關聯的數據Data_List(listView1, str_Drop[0]);} ??????? public void Data_List(ListView LV, string F)? //Form或MouseEventArgs添加命名空間using System.Windows.Forms;{ListViewItem item = new ListViewItem(F);LV.Items.Add(item);}然后編寫三個點按鈕的點擊事件,使其打開路徑選擇對話框,并將選擇的路徑顯示在TextBox中。
private void button2_Click(object sender, EventArgs e){if (folderBrowserDialog1.ShowDialog() == DialogResult.OK){textBox1.Text = folderBrowserDialog1.SelectedPath;}}然后編寫復制按鈕的點擊事件
private void button1_Click(object sender, EventArgs e){string FileName = "";int tem_n = 0;string DName = "";if (textBox1.Text.Length > 0 && listView1.Items.Count > 0){try{for (int i = 0; i < listView1.Items.Count; i++){FileName = listView1.Items[i].SubItems[0].Text;tem_n = FileName.LastIndexOf("\\");FileName = FileName.Substring(tem_n + 1, FileName.Length - tem_n - 1);DName = textBox1.Text.Trim() + "\\" + FileName;CopyFile(listView1.Items[i].SubItems[0].Text, DName, 1024);this.Text = "復制:" + listView1.Items[i].SubItems[0].Text;}MessageBox.Show("文件批量復制完成。");}catch{MessageBox.Show("文件復制錯誤。");}}}在復制按鈕的點擊事件中執行復制文件的方法CopyFile
FileStream FormerOpen;FileStream ToFileOpen;/// <summary>/// 文件的復制/// </summary>/// <param FormerFile="string">源文件路徑</param>/// <param toFile="string">目的文件路徑</param>/// <param SectSize="int">傳輸大小</param>/// <param progressBar="ProgressBar">ProgressBar控件</param>public void CopyFile(string FormerFile, string toFile, int SectSize){FileStream fileToCreate = new FileStream(toFile, FileMode.Create);??//創建目的文件,如果已存在將被覆蓋fileToCreate.Close();??????????//關閉所有資源fileToCreate.Dispose();??????????//釋放所有資源FormerOpen = new FileStream(FormerFile, FileMode.Open, FileAccess.Read);//以只讀方式打開源文件ToFileOpen = new FileStream(toFile, FileMode.Append, FileAccess.Write);?//以寫方式打開目的文件//根據一次傳輸的大小,計算傳輸的個數//int max = Convert.ToInt32(Math.Ceiling((double)FormerOpen.Length / (double)SectSize));int FileSize;????????????//要拷貝的文件的大小//如果分段拷貝,即每次拷貝內容小于文件總長度if (SectSize < FormerOpen.Length){byte[] buffer = new byte[SectSize];???????//根據傳輸的大小,定義一個字節數組int copied = 0;??????????//記錄傳輸的大小while (copied <= ((int)FormerOpen.Length - SectSize))???//拷貝主體部分{FileSize = FormerOpen.Read(buffer, 0, SectSize);???//從0開始讀,每次最大讀SectSizeFormerOpen.Flush();????????//清空緩存ToFileOpen.Write(buffer, 0, SectSize);?????//向目的文件寫入字節ToFileOpen.Flush();?????????//清空緩存ToFileOpen.Position = FormerOpen.Position;????//使源文件和目的文件流的位置相同copied += FileSize;?????????//記錄已拷貝的大小}int left = (int)FormerOpen.Length - copied;??????//獲取剩余大小FileSize = FormerOpen.Read(buffer, 0, left);?????//讀取剩余的字節FormerOpen.Flush();?????????//清空緩存ToFileOpen.Write(buffer, 0, left);???????//寫入剩余的部分ToFileOpen.Flush();?????????//清空緩存}//如果整體拷貝,即每次拷貝內容大于文件總長度else{byte[] buffer = new byte[FormerOpen.Length];????//獲取文件的大小FormerOpen.Read(buffer, 0, (int)FormerOpen.Length);???//讀取源文件的字節FormerOpen.Flush();?????????//清空緩存ToFileOpen.Write(buffer, 0, (int)FormerOpen.Length);???//寫放字節ToFileOpen.Flush();?????????//清空緩存}FormerOpen.Close();??????????//釋放所有資源ToFileOpen.Close();??????????//釋放所有資源}代碼下載
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/12028246
總結
以上是生活随笔為你收集整理的Winform中实现批量文件复制(附代码下载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Winform中实现自定义屏保效果(附代
- 下一篇: JPA中实现单向多对一的关联关系