網站首頁 編程語言 正文
使用WPF做的一個簡單的操作文件的demo,包括復制和移動文件夾,核心思想就是使用遞歸,如果只是移動或者復制單一文件,直接使用File.Copy()或者File.Move()方法即可。
XAML代碼
<Window x:Class="OperationFile.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:OperationFile" mc:Ignorable="d" Title="MainWindow" Height="220" Width="300"> <Grid> <Button Content="復制文件" HorizontalAlignment="Left" VerticalAlignment="Top" Height="30" Width="100" Margin="80,20" x:Name="btnCopy" Click="btnCopy_Click"/> <Button Content="移動文件" HorizontalAlignment="Left" VerticalAlignment="Top" Height="30" Width="100" Margin="80,70" x:Name="btnMove" Click="btnMove_Click"/> </Grid> </Window>
后端代碼如下:
using System; using System.Windows; namespace OperationFile { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } /// <summary> /// 移動文件夾(拷貝) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnMove_Click(object sender, RoutedEventArgs e) { try { FileUtility.MoveFolder(@"C:\Test", @"D:\Raw Data\Temp"); MessageBox.Show("移動文件夾完成"); } catch (Exception ex) { MessageBox.Show("移動文件夾出錯"); } } /// <summary> /// 復制文件夾 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCopy_Click(object sender, RoutedEventArgs e) { try { FileUtility.CopyFolder(@"C:\Test", @"D:\Raw Data\Temp"); MessageBox.Show("復制文件夾完成"); } catch (Exception ex) { MessageBox.Show("復制文件夾出錯"); } } } }
FileUtility類代碼
using System; using System.IO; namespace OperationFile { public static class FileUtility { /// <summary> /// 復制文件夾及文件 /// </summary> /// <param name="sourceFolder">原文件路徑</param> /// <param name="destFolder">目標文件路徑</param> /// <returns></returns> public static void CopyFolder(string sourceFolder, string destFolder) { try { //如果目標路徑不存在,則創建目標路徑 if (!Directory.Exists(destFolder)) { Directory.CreateDirectory(destFolder); } //得到原文件根目錄下的所有文件 string[] files = Directory.GetFiles(sourceFolder); foreach (string file in files) { string name = Path.GetFileName(file); string dest = Path.Combine(destFolder, name); // 復制文件 File.Copy(file, dest); } //得到原文件根目錄下的所有文件夾 string[] folders = Directory.GetDirectories(sourceFolder); foreach (string folder in folders) { string dirName = folder.Split('\\')[folder.Split('\\').Length - 1]; string destfolder = Path.Combine(destFolder, dirName); // 遞歸調用 CopyFolder(folder, destfolder); } } catch (Exception ex) { throw new Exception($"copy file Error:{ex.Message}\r\n source:{ex.StackTrace}"); } } /// <summary> /// 移動文件 /// </summary> /// <param name="sourceFolder">源文件夾</param> /// <param name="destFolder">目標文件呢</param> public static void MoveFolder(string sourceFolder, string destFolder) { try { //如果目標路徑不存在,則創建目標路徑 if (!Directory.Exists(destFolder)) { Directory.CreateDirectory(destFolder); } //得到原文件根目錄下的所有文件 string[] files = Directory.GetFiles(sourceFolder); foreach (string file in files) { string name = Path.GetFileName(file); string dest = Path.Combine(destFolder, name); // 移動文件 File.Move(file, dest); } //得到原文件根目錄下的所有文件夾 string[] folders = Directory.GetDirectories(sourceFolder); foreach (string folder in folders) { string dirName = folder.Split('\\')[folder.Split('\\').Length - 1]; string destfolder = Path.Combine(destFolder, dirName); // 遞歸調用 MoveFolder(folder, destfolder); } // 刪除源文件夾 Directory.Delete(sourceFolder); } catch (Exception ex) { throw new Exception($"move file Error:{ex.Message}\r\n source:{ex.StackTrace}"); } } } }
原文鏈接:https://www.cnblogs.com/dotnet261010/p/16055583.html
相關推薦
- 2022-02-22 解決:DevTools failed to load SourceMap:... net::ERR_
- 2023-01-15 React?Fiber樹的構建和替換過程講解_React
- 2022-09-05 Shiro和Security的核心模塊以及兩者的區別
- 2022-08-10 python中ThreadPoolExecutor線程池和ProcessPoolExecutor進程
- 2022-01-27 workerman執行busy,http請求不返回導致阻塞
- 2022-12-23 swift指針及內存管理內存綁定實例詳解_Swift
- 2023-06-03 scipy稀疏數組dok_array的具體使用_python
- 2022-11-16 一文搞懂C++中的運算符重載_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支