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);
}
}
}
}