C#递归拷贝文件删除文件

拷贝文件及子文件,最后一个参数排除,哪个不要删除。(其实就是移动的效果)

 //拷贝文件及子文件
        public static void CopyDirectory(string src, string dest, string [] skips)
        {
            if (string.IsNullOrEmpty(src)) return;
            CreateDirectoryIfNotExists(dest);

            //拷贝子文件
            foreach (string file in Directory.GetFiles(src))
            {
                string fileName = Path.GetFileName(file);
                bool bSkip = false;
                if (skips != null)
                {
                    foreach (string skip in skips)
                    {
                        if (fileName.Contains(skip))
                        {
                            bSkip = true;
                            break;
                        }
                    }
                }
                if (bSkip) continue;
                try
                {
                    System.IO.File.Copy(file, dest + "\\" + fileName, true);
                }catch(Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            //递归拷贝
            foreach (string dir in Directory.GetDirectories(src))
            {
                string[] parts = dir.Split(‘\\‘);
                string lastDirPart = parts[parts.Length - 1];
                CopyDirectory(dir, dest + "\\" + lastDirPart, skips);
            }
        }

  递归删除文件

 public static void DeleteDirectory(string src, string[] skips)
        {
            if (string.IsNullOrEmpty(src)) return;
            if (src.Length <= 10)
            {
                throw new Exception("文件路径小,删除请注意");
            }

            //删除子文件
            foreach (string file in Directory.GetFiles(src))
            {
                string fileName = Path.GetFileName(file);
                bool bSkip = false;
                if (skips != null)
                {
                    foreach (string skip in skips)
                    {
                        if (fileName.Contains(skip))
                        {
                            bSkip = true;
                            break;
                        }
                    }
                }
                if (bSkip) continue;
                try
                {
                    File.Delete(file);
                    //File.SetAttributes(file, FileAttributes.Normal);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            //递归删除
            foreach (string dir in Directory.GetDirectories(src))
            {
                 DeleteDirectory(dir, skips);
            }

            //删除自己
            if (skips == null)
            {
                Directory.Delete(src);
            }
        }

  

原文地址:https://www.cnblogs.com/sunliyuan/p/10450135.html

时间: 2024-08-07 19:00:15

C#递归拷贝文件删除文件的相关文章

C# 下载文件 删除文件 写入文本

由于经常用到文件处理,便自己封装了下 分享给大家. 包含写入文本  批量删除文件  下载文件 .--可直接使用 /// <summary>/// 写入到txt/// </summary>/// <param name="savePath"></param>/// <param name="content"></param>public static void WriteInTxt(string

java用流实现创建文件夹, 文件改名, 文件删除, 文件复制

创建TestFileManager类,在本类中分别创建factFile()方法(遍历文件夹中所有的文件).console()方法(换行).createFolder()方法(创建文件夹). renameFile()方法(改名).deleteFile()方法(删除文件).copyFile()方法(复制文件).showContent()(每一次操作完成重新输出所有文件): package com.maya.hanqi.filemanager; import java.io.BufferedReader

SVN的搭建及使用(三)用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突,重新设置用户名和密码等

添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态,如图: 这时候,你需要告知TortoiseSVN你的操作,如图: 加入以后,你的文件会变成这个状态,如图: 这时候使用TortoiseSVN进行提交.这样别人就能看到你所做的更改了,如图. 修改文件 使用TortoiseSVN更新,修改工作副本中的Readme.txt文件,加入"hello world!",然后保存,你会发现Readme.txt文件的图标改变了,如图: 这个红

关于Linux下文件删除文件时提示No such file or directory

尊敬的各位老大: 本人了Linux小白一枚,遇到一点问题想请老大们指点一下今天练习tar命令压缩文件时想给给文件名内增加一个当前年月日 [[email protected] log]# tar zcvf log.tar-'date +%F'.gz . 结果把反引号写成单引号用 ls 命令查看发现压缩后的文件名为 log.tardate +%F.gz 意识到自己的错误之后想删除这个文件结果出现 [[email protected] log]# rm ./log.tar-date +%F.gz rm

[sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表

写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的地方 Rest API的简单应用 rest api方式实现对文档库的管理 通过WebClient模拟post上传文件到服务器 WebHttpRequest在sharepoint文档库中的使用 [sharepoint]Rest api相关知识(转) [sharepoint]根据用户名获取该用户的权限

Qt删除文件夹

写的软件需要进行文件夹的复制,开始不怎么懂就找了个拷贝文件夹的代码测试了一下,运行程序选择了源目录和目标目录相同进行拷贝,结果悲剧了.因为是递归拷贝,导致文件夹被嵌套N层,软件死机,强制结束后,产生的文件夹有N多层,右键删除说文件名太长无法删除.网上找了很多方法都无法清理掉这个嵌套的文件夹,折磨了N久,终于想通,既然是Qt生成的嵌套文件夹,为何不用Qt再写一个删除的程序呢?于是动手查看help,找API函数说明,码代码. //删除文件夹 bool MainWindow::DelDir(const

复制文件夹,删除文件夹

复制文件夹 procedure TForm1.Button1Click(Sender: TObject); var ss:TSHFileOpStruct; sdir,ddir:string;begin sdir:=ExtractFilePath(ParamStr(0))+'Sou'; //源目录 ddir:=ExtractFilePath(ParamStr(0))+'Dst';//目的目录 if not DirectoryExists(ddir) then CreateDir(ddir); //

C# 系统应用之ListView控件 (三).添加ContextMenuStrip右键菜单打开文件和删除文件功能

在前面讲述过使用TreeView控件和ListView控件显示磁盘目录信息,但仅仅是显示信息是不够的,我们还需要具体的操作.在"个人电脑使用历史痕迹"项目中我还需要添加"打开文件"和"删除文件"两种方法.具体如下: 在第一篇文章"C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标"中显示如下: http://blog.csdn.net/eastmount/article/details/1945310

Linux服务器生产环境中的文件删除与替换

在Linux运维中经常遇到要替换Linux服务器系统程序或者业务应用程序文件的情况,很多人都会担心,直接替换会不会导致Linux系统程序崩溃或者应用程序崩溃,而需要关闭服务才敢替换,今天在freebuf网站偶然阅读到一篇文章<如何进行Linux平台共享库替换>,突然明白了以前没有搞清楚的几个自认为"奇怪"的现象. 这些现象包括但不限于: 删除某个应用程序的部分文件,为何不会导致此应用程序崩溃 nginx等服务如何可以做到平滑重启 某些删除的文件为何可以通过lsof根据ino