• C#复制和移动文件夹


    使用WPF做的一个简单的操作文件的demo,包括复制和移动文件夹,核心思想就是使用递归,如果只是移动或者复制单一文件,直接使用File.Copy()或者File.Move()方法即可。

    1、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}");
                }
            }
        }
    }
  • 相关阅读:
    jsonp跨域请求
    Vue-cli脚手架安装
    微信小程序获取用户信息“授权失败”场景的处理
    微信小程序
    获取url参数
    [git] github 使用简单记录
    [翻译]《高级英汉翻译理论与实践》摘录
    [Java] 模板引擎 Velocity 随笔
    [Java] 垃圾回收 ( Garbage Collection ) 的步骤演示
    [Java] 垃圾回收机制 ( Garbage Collection ) 简介
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/16055583.html
Copyright © 2020-2023  润新知