using System.Collections.Generic; using System.IO; namespace TEngine { /// /// 文件操作助手类,提供了各种文件操作方法。 /// public static class FileHelper { /// /// 获取相对路径的完整路径。 /// /// 相对路径。 /// 完整路径。 public static string GetFullPath(string relativePath) { return Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), relativePath)); } /// /// 将文件复制到目标路径,如果目标目录不存在会自动创建目录。 /// /// 源文件路径。 /// 目标文件路径。 /// 是否覆盖已存在的目标文件。 public static void Copy(string sourceFile, string destinationFile, bool overwrite) { var directoriesByFilePath = GetDirectoriesByFilePath(destinationFile); foreach (var dir in directoriesByFilePath) { if (Directory.Exists(dir)) { continue; } Directory.CreateDirectory(dir); } File.Copy(sourceFile, destinationFile, overwrite); } /// /// 获取文件路径内的所有文件夹路径。 /// /// 文件路径。 /// 文件夹路径列表。 public static List GetDirectoriesByFilePath(string filePath) { var dir = ""; var directories = new List(); var fileDirectories = filePath.Split('/'); for (var i = 0; i < fileDirectories.Length - 1; i++) { dir = $"{dir}{fileDirectories[i]}/"; directories.Add(dir); } return directories; } /// /// 将文件夹内的所有内容复制到目标位置。 /// /// 源文件夹路径。 /// 目标文件夹路径。 /// 是否覆盖已存在的文件。 public static void CopyDirectory(string sourceDirectory, string destinationDirectory, bool overwrite) { // 创建目标文件夹 if (!Directory.Exists(destinationDirectory)) { Directory.CreateDirectory(destinationDirectory); } // 获取当前文件夹中的所有文件 var files = Directory.GetFiles(sourceDirectory); // 拷贝文件到目标文件夹 foreach (var file in files) { var fileName = Path.GetFileName(file); var destinationPath = Path.Combine(destinationDirectory, fileName); File.Copy(file, destinationPath, overwrite); } // 获取源文件夹中的所有子文件夹 var directories = Directory.GetDirectories(sourceDirectory); // 递归方式拷贝文件夹 foreach (var directory in directories) { var directoryName = Path.GetFileName(directory); var destinationPath = Path.Combine(destinationDirectory, directoryName); CopyDirectory(directory, destinationPath, overwrite); } } /// /// 获取目录下的所有文件 /// /// 文件夹路径。 /// 需要查找的文件通配符 /// 查找的类型 /// public static string[] GetDirectoryFile(string folderPath, string searchPattern, SearchOption searchOption) { return Directory.GetFiles(folderPath, searchPattern, searchOption); } /// /// 清空文件夹内的所有文件。 /// /// 文件夹路径。 public static void ClearDirectoryFile(string folderPath) { if (!Directory.Exists(folderPath)) { return; } var files = Directory.GetFiles(folderPath); foreach (var file in files) { File.Delete(file); } } } }