• 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);
                }
            }
  • 相关阅读:
    关于数据库索引,必须掌握的知识点
    Java基础知识面试题(最详细版)
    基于WinForm制作的用户名密码存储器
    DataGridView点击列名自动排序
    WebRequest.Create(url)无效的URI:无效端口指定的URL时
    knockout 数据绑定,同一个页面table位置加载两个不同的表格数据
    pipeline管道初体验
    Socket,长连接,消息推送,消息提醒,未读消息提醒,消息通知,未读消息通知
    搭建SVN服务器
    C#解决jsonp跨域问题jsonp跨域配置
  • 原文地址:https://www.cnblogs.com/tianxue/p/12128412.html
Copyright © 2020-2023  润新知