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

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

到此这篇关于C#实现WPF项目复制和移动文件夹的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C# 对文件与文件夹的操作包括删除、移动与复制

    在.Net中,对文件(File)和文件夹(Folder)的操作可以使用File类和Directory类,也可以使用FileInfo类和DirectoryInfo类.文件夹(Folder)是只在Windows操作系统中使用的名词.在操作系统的理论中,人们更习惯于使用目录(Directory)这个名词.或许微软为了有朝一日将.Net移植到其他的操作系统中(实际上也有很多人也在做着这个项目),所以还是以Directory来命名操作文件夹的类. File类和Directory类都是静态类.使用它们的好处

  • C#程序中创建、复制、移动、删除文件或文件夹的示例

    创建文件或文件夹 您可通过编程方式在您的计算机上创建文件夹.子文件夹和子文件夹中的文件,并将数据写入文件. public class CreateFileOrFolder { static void Main() { string folderName = @"c:\Top-Level Folder"; string pathString = System.IO.Path.Combine(folderName, "SubFolder"); string pathSt

  • c# 文件操作(移动,复制,重命名)

    文件移动 public static void MoveFolder(string sourcePath, string destPath) { if (Directory.Exists(sourcePath)) { if (!Directory.Exists(destPath)) { //目标目录不存在则创建 try { Directory.CreateDirectory(destPath); } catch (Exception ex) { throw new Exception("创建目标

  • C#进行文件读写、创建、复制、移动、删除的方法

    本文实例讲述了C#进行文件读写.创建.复制.移动.删除的方法.分享给大家供大家参考.具体分析如下: 1.文件夹创建.移动.删除 //创建文件夹 Directory.CreateDirectory(Server.MapPath("a")); Directory.CreateDirectory(Server.MapPath("b")); Directory.CreateDirectory(Server.MapPath("c")); //移动b到a D

  • c#文件的复制,移动,创建(实例代码)

    复制代码 代码如下: protected void Page_Load(object sender, EventArgs e) {     if (!Page.IsPostBack)     {         this.List();     } } protected void Button1_Click(object sender, EventArgs e) {     if (TextBox2.Text == "")     {         Response.Write(&

  • C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】

    本文实例讲述了C#实现的文件操作封装类.分享给大家供大家参考,具体如下: 最近发现群共享里面有个C# 文件操作封装类,其方法是调用Windows API 来操作的文件的删除.移动.复制.重命名操作.下载下来一试,发现果然不错,特在此记录,以防丢失! 文件操作类代码如下: using System; using System.Runtime.InteropServices; using System.IO; namespace LxFile { /// <summary> /// 文件操作代理,

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

    使用WPF做的一个简单的操作文件的demo,包括复制和移动文件夹,核心思想就是使用递归,如果只是移动或者复制单一文件,直接使用File.Copy()或者File.Move()方法即可. XAML代码 <Window x:Class="OperationFile.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://sc

  • node.js文件的复制、创建文件夹等相关操作

    nodeJS对文件的复制: 一般对于小型文件的复制操作使用的是流的管道运输操作, 首先需要加载引入的文件:var fs = require('fs'); 1.同步创建文件夹 fs.mkdirSync(yourfileDirPath); 异步创建文件夹 fs.mkdir(yourfileDirPath); 2.判断文件夹是否存在-同步 fs.existsSync(dirpath); 异步 fs.exists(dirpath); 利用上面的相关操作,我们可以直接写出一个方法判断创建文件夹, func

  • C#将文件复制到指定文件夹并整理

    下面是在C#中将文件复制(剪切是先复制再删除)到指定的路径,并按日期归档的一个简单实例.值得注意的2点是: 1)文件的路径是关键,程序中使用双斜杠\\ 2)文件和文件夹的区别 private void DoWork() { String dir="D:\\ABC" //创建备份文件夹,按时间命名 String bakDir = dir + "\\bak\\" + DateTime.Now.ToString("yyyy-MM-dd"); if (D

  • Vue项目如何获取本地文件夹绝对路径

    目录 一.前端代码 1.弹框样式代码 2.导入方法(不要忘记了导入方法和data定义) 3.方法区代码 4.api接口中的config.js代码 二.后端代码 controller层代码 service接口interface service层代码impl 总结 Vue项目,实现获取本地的绝对文件夹路径的解决方案 一.前端代码 vue项目下的index中代码如下 1.弹框样式代码 <el-dialog title="" :append-to-body="true"

  • nodejs对项目下所有空文件夹创建gitkeep的方法

    项目/框架初始化时可能需要保留一些空文件,这时候就需要批量新增gitkeep const fs = require('fs') const baseurl = 'D:/test' const ignoreDir = ['.git', '.vscode', 'node_modules'] addGitkeep(baseurl) function addGitkeep(url) { fs.readdir(url, {withFileTypes: true}, (err, files) => { er

  • 如何在React项目中引入字体文件并使用详解

    目录 前言 下面讲下如何引入字体文件并使用 一.下载字体包 二.将字体文件放到项目里 三.使用新字体 总结 前言 在做React项目的时候,发现UI设计给出的设计稿里,某些文字所用的字体,系统默认不支持.比如设计需要的这个字体:EmerlandRegular,即使在css里将文字字体设置为他们,实际效果也显示不出来. <Typography style={{ fontSize:'22px', fontFamily:'EmerlandRegular', textAlign:'center', co

  • 多个vue项目实现共用一个node-modules文件夹

    多个vue项目共用一个node-modules文件夹 问题背景 一个目录下有多个vue项目. >> root     -- my-vueproject-a         -- package.json         -- node-modules     -- my-vueproject-b         -- package.json         -- node-modules ... 期望结果 将所有vue项目中的依赖包提取为一个 >> root     -- my-

  • 实现文件和文件夹的复制的方法

    话不多说,请看代码: private void btnSave_Click(object sender, EventArgs e) //文件复制.保存方法 { #region 静态复制文件(写死) string desPath = @"c:\1\1.chm"; if (File.Exists(desPath)) { //目标文件已存在 if (MessageBox.Show(("文件已存在,是否覆盖"), "询问", MessageBoxButt

  • PHP递归实现文件夹的复制、删除、查看大小操作示例

    本文实例讲述了PHP递归实现文件夹的复制.删除.查看大小操作.分享给大家供大家参考,具体如下: PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动编写这些函数,主要的技巧是通过递归将问题逐层分解,直到分解成可以直接解决的最小子问题. 查看文件夹大小 由于文件夹是没有大小的,平常所说的文件夹尺寸准确的说应该是文件夹中所有文件的总大小.所以只需要将文件

  • python批量复制图片到另一个文件夹

    本文实例为大家分享了python批量复制图片到文件夹的具体代码,供大家参考,具体内容如下 直接上代码: # -*- coding: utf-8 -*- """ Created on Mon Apr 02 21:03:44 2018 @author: Fsl """ import shutil #这个库复制文件比较省事 def objFileName(): ''' 生成文件名列表 :return: ''' local_file_name_list

随机推荐