最近在开发的时候,接到一个任务:将自动化打包编译之后的项目资源做一个备份,因编译之后的资源包含.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 { }
}