C#实现文件和目录的复制替换

有这么一个情况,经常遇到一个项目的某个部分的功能与另一个项目的某个部分的代码是一样的,经常会遇到搬代码的情况,就觉得需要这么一个工具来自动搬

就以C#为例,我发现虽然文件和目录都是可以copy的,但是呢,tfs或者说其他的源代码管理工具不一定就自动加上去了,所以最好是第一次搬动还是手工搬吧,有些整个项目都是新增的情况下。

核心代码如下,供参考:

这是copy主方法体,其中souce是源代码根目录,target:目标代码目录,itemList:是文件或者目录相对于源代码根目录的路径

复制代码
private static void CopyConstant(string source, string target, List<string> itemList)
        {

            List<CopyItemDto> listItem = new List<CopyItemDto>();
            foreach (var item in itemList)
            {
                listItem.Add(new CopyItemDto()
                {
                    RelativePath = item,
                    SourceAddress = source + @"\" + item,
                    TargetAddress = target + @"\" + item,
                });
            }

            var index = 1;

            foreach (var item in listItem)
            {
                Console.WriteLine(string.Format("{0} 开始copy:{1},({2}/{3})", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), item.RelativePath, index, listItem.Count));

                if (File.Exists(item.SourceAddress))
                {
                    CopyFileOnly(item.SourceAddress, item.TargetAddress);
                }
                else
                {
                    copyDirectory(item.SourceAddress, item.TargetAddress);
                }

                Console.WriteLine(string.Format("{0} 结束copy:{1}", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), item.RelativePath));
                index++;
            }
        }
复制代码

其中引用到的方法CopyFileOnly

复制代码
        public static void CopyFileOnly(string souce, string target)
        {
            System.IO.FileInfo file = new FileInfo(souce);

            string destDirectoryFullName = target.Replace(file.Name, "");
            if (!System.IO.Directory.Exists(destDirectoryFullName))
            {
                System.IO.Directory.CreateDirectory(destDirectoryFullName);
            }

            file.CopyTo(target, true);
        }
复制代码

copyDirectory

复制代码
        public static void copyDirectory(string sPath, string dPath)
        {
            string[] directories = System.IO.Directory.GetDirectories(sPath);
            if (!System.IO.Directory.Exists(dPath))
            {
                System.IO.Directory.CreateDirectory(dPath);
            }

            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(sPath);
            System.IO.DirectoryInfo[] dirs = dir.GetDirectories();
            CopyFile(dir, dPath);
            if (dirs.Length > 0)
            {
                foreach (System.IO.DirectoryInfo temDirectoryInfo in dirs)
                {
                    string sourceDirectoryFullName = temDirectoryInfo.FullName;
                    string destDirectoryFullName = sourceDirectoryFullName.Replace(sPath, dPath);
                    if (!System.IO.Directory.Exists(destDirectoryFullName))
                    {
                        System.IO.Directory.CreateDirectory(destDirectoryFullName);
                    }
                    CopyFile(temDirectoryInfo, destDirectoryFullName);
                    copyDirectory(sourceDirectoryFullName, destDirectoryFullName);
                }
            }

        }
复制代码

CopyFile

复制代码
        /// <summary>
        /// 拷贝目录下的所有文件到目的目录。
        /// </summary>
        /// <param >源路径</param>
        /// <param >目的路径</param>
        public static void CopyFile(System.IO.DirectoryInfo path, string desPath)
        {
            string sourcePath = path.FullName;
            System.IO.FileInfo[] files = path.GetFiles();
            foreach (System.IO.FileInfo file in files)
            {
                string sourceFileFullName = file.FullName;
                string destFileFullName = sourceFileFullName.Replace(sourcePath, desPath);
                file.CopyTo(destFileFullName, true);
            }
        }
复制代码

 

posted on   BestNow  阅读(2510)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示