zoukankan      html  css  js  c++  java
  • 怎么自动把自己项目的dll文件copy到宿主bin文件夹?

    • 在自己项目各层在vs里按图中设置(原理:编译后运行控制台程序,copy工作是让控制台程序完成的。注意:start 后跟上exe文件路径,然后是空格)
    • 控制台程序源码
        public class Program
        {
            public static void Main(string[] args)
            {
                //string para1 = @"D:word_codeServermyProj\bin,casereport,D:Web_zyBin";// 依次是源,dll文件关键词,目标目录
                string para1 =args[0];
                string[] ar = para1.Split(',', '|', '、');//源项目bin路径、移动dll文件的关键词、目标服务器路径
                Console.WriteLine("源:" + ar[0]);
                Console.WriteLine("目标:" + ar[2]);
                var moveFile = new List<string>();
                if (!string.IsNullOrWhiteSpace(ar[0]) && !string.IsNullOrWhiteSpace(ar[1]))
                {
                    var list=GetFiles(ar[0],"", true);
                    moveFile = (from p in list
                            where Path.GetFileName(p).ToLower().Contains(ar[1].ToLower())
                            select p).ToList();
                }
                if (!string.IsNullOrWhiteSpace(ar[2]))
                {
                    foreach (var item in moveFile)
                    {
                        CopyFile(item, $@"{ar[2]}{Path.GetFileName(item)}");
                    }
                }
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("【成功】  按任意键退出...");
                Console.ReadKey(true);
            }
    
    
            #region 查找目录下包含子目录的全部文件
            /// <summary>
            /// 获得目录下所有文件或指定文件类型文件地址
            /// </summary>
            public static List<string> fileList = new List<string>();
            public static string[] GetFiles(string fullPath, string extName, bool isFullName = false)
            {
                try
                {
                    fileList.Clear();
                    DirectoryInfo dirs = new DirectoryInfo(fullPath); //获得程序所在路径的目录对象
                    DirectoryInfo[] dir = dirs.GetDirectories();//获得目录下文件夹对象
                    FileInfo[] file = dirs.GetFiles();//获得目录下文件对象
                    int dircount = dir.Count();//获得文件夹对象数量
                    int filecount = file.Count();//获得文件对象数量
    
                    //循环文件夹
                    for (int i = 0; i < dircount; i++)
                    {
                        string pathNode = fullPath + "\" + dir[i].Name;
                        GetMultiFile(pathNode, isFullName);
                    }
    
                    //循环文件
                    for (int j = 0; j < filecount; j++)
                    {
                        if (isFullName)
                        {
                            fileList.Add(file[j].FullName);
                        }
                        else
                        {
                            fileList.Add(file[j].Name);
                        }
                    }
    
                    return fileList.ToArray();
                }
                catch (Exception ex)
                {
                    Console.WriteLine (ex.Message + "
    出错的位置为:Form1.PaintTreeView()");
                }
    
                return null;
            }
    
            private static bool GetMultiFile(string path, bool isFullName = false)
            {
                if (Directory.Exists(path) == false)
                { return false; }
    
                DirectoryInfo dirs = new DirectoryInfo(path); //获得程序所在路径的目录对象
                DirectoryInfo[] dir = dirs.GetDirectories();//获得目录下文件夹对象
                FileInfo[] file = dirs.GetFiles();//获得目录下文件对象
                int dircount = dir.Count();//获得文件夹对象数量
                int filecount = file.Count();//获得文件对象数量
                int sumcount = dircount + filecount;
    
                if (sumcount == 0)
                { return false; }
    
                //循环文件夹
                for (int j = 0; j < dircount; j++)
                {
                    string pathNodeB = path + "\" + dir[j].Name;
                    GetMultiFile(pathNodeB, isFullName);
                }
    
                //循环文件
                for (int j = 0; j < filecount; j++)
                {
                    if (isFullName)
                    {
                        fileList.Add(file[j].FullName);
                    }
                    else
                    {
                        fileList.Add(file[j].Name);
                    }
                }
                return true;
            }
    
            /// <summary>
            /// 大文件多次复制文件  true:复制成功   false:复制失败
            /// </summary>
            /// <param name="soucrePath">原始文件路径</param>
            /// <param name="targetPath">复制目标文件路径</param>
            /// <returns></returns>
            public static bool CopyFile(string soucrePath, string targetPath)
            {
                try
                {
                    //读取复制文件流
                    using (FileStream fsRead = new FileStream(soucrePath, FileMode.Open, FileAccess.Read))
                    {
                        //写入文件复制流
                        using (FileStream fsWrite = new FileStream(targetPath, FileMode.OpenOrCreate, FileAccess.Write))
                        {
                            byte[] buffer = new byte[1024 * 1024 * 2]; //每次读取2M
                            while (true)//文件大,每次读取2M
                            {
                                int n = fsRead.Read(buffer, 0, buffer.Count());//每次读取的数据    n:是每次读取到的实际数据大小
                                //如果n=0说明读取的数据为空,已经读取到最后了,跳出循环
                                if (n == 0)
                                {
                                    break;
                                }
                                //写入每次读取的实际数据大小
                                fsWrite.Write(buffer, 0, n);
                            }
                        }
                    }
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
            #endregion
        }
    
  • 相关阅读:
    7-3.自定义列表
    GoLang 使用协程与管道随机生成姓名
    [Unity3D] 点击物品显示物品信息
    [Unity3D] 碰撞物体添加到背包
    [PS] DDS文件导入插件
    [Unity3D] 给角色添加武器
    [Unity3D] 刚体 碰撞器 触发器
    [Unity3D] 物体的几种移动方法
    [Unity3D] 解决导入的模型出现闪烁的问题
    [Unity3D] 人物角色跳跃(动画跳跃&刚体跳跃)
  • 原文地址:https://www.cnblogs.com/anjun-xy/p/13154151.html
Copyright © 2011-2022 走看看