C#实现WPF项目复制和移动文件夹

作者:.NET开发菜鸟 时间:2023-06-07 16:49:16 

使用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

标签:C#,WPF,复制,移动,文件夹
0
投稿

猜你喜欢

  • C#实现动态生成静态页面的类详解

    2022-03-25 02:25:29
  • 十分钟速懂java知识点 System类

    2022-11-25 04:19:26
  • C# 中将数值型数据转换为字节数组的方法

    2023-09-29 05:46:17
  • 基于rocketmq的有序消费模式和并发消费模式的区别说明

    2021-10-29 08:41:02
  • SpringBoot整合Swagger2的步骤详解

    2021-07-19 11:59:49
  • Android开发之文件操作模式深入理解

    2023-10-14 02:48:12
  • Java二维数组与动态数组ArrayList类详解

    2023-07-31 19:53:56
  • 运行java的class文件方法详解

    2021-07-29 03:53:48
  • @Transactional跟@DS动态数据源注解冲突的解决

    2022-07-13 10:40:39
  • Java设计模式之动态代理模式实例分析

    2022-07-07 17:55:07
  • Android编程实现等比例显示图片的方法

    2022-05-20 03:37:34
  • Android EditText 监听用户输入完成的实例

    2022-06-22 18:41:54
  • rxjava+retrofit实现多图上传实例代码

    2022-06-16 18:55:33
  • Entity Framework映射TPH、TPT、TPC与继承类

    2022-10-18 04:52:52
  • Java实现循环体的过滤器的方法

    2023-11-22 09:35:33
  • android studio xml文件实现添加注释

    2022-10-11 14:24:26
  • Android中的Adapter简单介绍

    2023-01-22 10:01:51
  • Java事务管理学习之Spring和Hibernate详解

    2023-04-11 00:01:25
  • Java String对象使用方法详解

    2023-12-14 14:43:52
  • 将cantk runtime嵌入到现有的APP中的方法

    2021-12-04 06:06:09
  • asp之家 软件编程 m.aspxhome.com