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}");
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章