拷贝文件夹里面的所有内容(包含子文件夹、子文件)

最近在开发的时候,接到一个任务:将自动化打包编译之后的项目资源做一个备份,因编译之后的资源包含.mainfest文件和.meat,实际出包使用的资源是不需要这些文件的。所以备份的时候需要筛选掉后缀为.mainfest和.meat 的文件。

说到底就是一个文件的复制、粘贴、筛选的操作。逻辑实现:

       public void CopyNewAssetBundleFolder() {
            //m_buildProjectPath 当前项目的路径
            //   sourceFilePath编译之后的资源目录路径
            string sourceFilePath = Path.Combine(m_buildProjectPath, "NewAssetBundle");
            //      saveFilePath 保存的文件夹路径
            string saveFilePath = Path.Combine(m_buildProjectPath, "FinalAssetBundle");
            if (Directory.Exists(sourceFilePath)) {
                if (Directory.Exists(saveFilePath))  {
                    Console.WriteLine("删除已拷贝的FinalAssetBundle资源目录");
                   // DelectDir(saveFilePath);     //递归 删除指定的目录并(如果指示)删除该目录中的所有子目录和文件。
                    Directory.Delete(saveFilePath, true);   // 删除指定的目录并(如果指示)删除该目录中的所有子目录和文件。
                }
                Console.WriteLine("重新创建FinalAssetBundle资源目录");
                CopyDirectory(sourceFilePath, Path.Combine(m_buildProjectPath, "FinalAssetBundle"));
            }
            else {
                Console.WriteLine("NewAssetBundle 资源目录不存在");
            }

        }

         /// <summary>
        /// 拷贝资源目录
        /// </summary>
        public void CopyDirectory(string sourceDirPath, string saveDirPath)  {
            if (!Directory.Exists(saveDirPath)){
                Directory.CreateDirectory(saveDirPath);
            }
            //获取源文件目录下的所有文件和子目录
            DirectoryInfo dir = new DirectoryInfo(sourceDirPath);
            FileSystemInfo[] fileinfo = dir.GetFileSystemInfos();
            foreach (FileSystemInfo i in fileinfo)  {
                if (i is DirectoryInfo)    {  //判断是否是文件夹
                CreateFileFolder(Path.Combine(sourceDirPath, i.Name), Path.Combine(saveDirPath, i.Name));
                }
                else {
                    string tmpFullName = i.FullName.ToLower();
                    if (i is FileInfo) {

    if (tmpFullName.EndsWith(".DS_Store",StringComparison.OrdinalIgnoreCase) 

|| tmpFullName.EndsWith(".manifest") || tmpFullName.EndsWith(".meta")) {

                        continue;
                        }
                        File.Copy(i.FullName, Path.Combine(saveDirPath, i.Name), true);
                    }
                }
            }
        }


        private static void CopyFile(string sourceDirPath, string saveDirPath){
            if (!Directory.Exists(saveDirPath)) {
                Directory.CreateDirectory(saveDirPath);
            }
            DirectoryInfo dir = new DirectoryInfo(sourceDirPath);
            FileSystemInfo[] fileinfo = dir.GetFileSystemInfos();
            foreach (FileSystemInfo i in fileinfo)    {
                string tmpFullName = i.FullName.ToLower();
                if (i is FileInfo)   {

       if (tmpFullName.EndsWith(".DS_Store", StringComparison.OrdinalIgnoreCase) 

|| tmpFullName.EndsWith(".manifest") || tmpFullName.EndsWith(".meta")) {

                        continue;
                    }
                    File.Copy(i.FullName, Path.Combine(saveDirPath, i.Name), true);
                }
                if (i is DirectoryInfo) {
              CreateFileFolder(Path.Combine(sourceDirPath, i.Name), Path.Combine(saveDirPath, i.Name));
                }
            }
        }

   public void DelectDir(string srcPath) {
            try {
                DirectoryInfo dir = new DirectoryInfo(srcPath);
                FileSystemInfo[] fileinfo = dir.GetFileSystemInfos();
                foreach (FileSystemInfo i in fileinfo) {
                    if (i is DirectoryInfo) {
                        DirectoryInfo subdir = new DirectoryInfo(i.FullName);
                        subdir.Delete(true);
                    }
                    else {
                        File.Delete(i.FullName);
                    }
                }
            }
            catch { }
        }


 
 

猜你喜欢

转载自blog.csdn.net/AnotherQuiet/article/details/80060357