MasstransferExporter/MasstransferInfrastructure/OTA/Client/OTAClient.cs

179 lines
5.5 KiB
C#
Raw Normal View History

using System.IO.Compression;
using MasstransferCommon.Utils;
using MasstransferInfrastructure.OTA.Model;
namespace MasstransferInfrastructure.OTA.Client;
public class OTAClient
{
/// <summary>
/// 检查更新
/// </summary>
/// <param name="updateUrl"></param>
/// <returns></returns>
public async Task<UpdateInfo?> CheckForUpdate(string updateUrl)
{
return await ApiClient.GetAsync<UpdateInfo>(updateUrl);
}
/// <summary>
/// 下载更新
/// </summary>
/// <param name="downloadUrl"></param>
/// <param name="filePath"></param>
public async Task DownloadUpdateAsync(string downloadUrl, string filePath)
{
await ApiClient.DownloadFileAsync(downloadUrl, filePath);
}
/// <summary>
/// 备份保存重要文件
/// </summary>
/// <param name="sourceDir">源地址</param>
/// <param name="destinationDir">目标地址</param>
/// <param name="fileExtension">保存文件扩展名</param>
/// <param name="logFileDir">保存文件日志</param>
public void BackupEssentialFiles(string sourceDir, string destinationDir, string[] fileExtension, string logFileDir)
{
try
{
// 获取当前目录的所有文件
string[] files = Directory.GetFiles(sourceDir);
//遍历当前目录文件是否是重要文件
foreach (string file in files)
{
string extension = Path.GetExtension(file).ToLower();
if (Array.Exists(fileExtension, ext => ext.Equals(extension, StringComparison.OrdinalIgnoreCase)))
{
// 备份文件到新目录
string destFile = Path.Combine(destinationDir, Path.GetFileName(file));
File.Copy(file, destFile, true);
// 记录文件的源地址
File.AppendAllText(logFileDir, $"{file}\n");
}
}
// 递归遍历子文件夹
string[] directories = Directory.GetDirectories(sourceDir);
foreach (string directory in directories)
{
BackupEssentialFiles(directory, destinationDir,fileExtension, logFileDir);
}
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
// 失败则删除重要文件备分
if (Directory.Exists(destinationDir))
{
DeleteDirectory(destinationDir);
}
}
}
/// <summary>
/// 恢复重要文件
/// </summary>
/// <param name="logFileDir">重要文件备份日志</param>
public void RecoverCriticalFiles(string logFileDir)
{
try
{
// 恢复备份
using (StreamReader reader = new StreamReader(logFileDir))
{
string line;
while ((line = reader.ReadLine()) != null)
{
var currentFilePath = Path.Combine(Path.GetDirectoryName(logFileDir), Path.GetFileName(line));
File.Copy(currentFilePath,line, true);
}
}
//删除重要文件备份
DeleteDirectory(Path.GetDirectoryName(logFileDir));
}
catch (Exception ex)
{
Console.WriteLine($"读取失败: {ex.Message}");
}
}
/// <summary>
/// 压缩目录
/// </summary>
/// <param name="sourceDir">源目录地址</param>
/// <param name="zipFilePath">压缩文件保存地址</param>
public void CompressDirectory(string sourceDir, string zipFilePath)
{
try
{
if (File.Exists(zipFilePath))
{
File.Delete(zipFilePath);
}
ZipFile.CreateFromDirectory(sourceDir, zipFilePath, CompressionLevel.Fastest, false);
}
catch(Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
// 失败,则删除损坏或者部分创建的压缩包
if (File.Exists(zipFilePath))
{
DeleteFile(zipFilePath);
}
}
}
/// <summary>
/// 解压缩目录
/// </summary>
/// <param name="zipFilePath">压缩文件地址</param>
/// <param name="extractPath">解压目录</param>
public void ExtractDirectory(string zipFilePath, string extractPath)
{
try
{
ZipFile.ExtractToDirectory(zipFilePath, extractPath);
}
catch (Exception ex)
{
Console.WriteLine($"解压失败: {ex.Message}");
// 失败,则删除可能产生的文件
if (Directory.Exists(extractPath))
{
DeleteDirectory(extractPath);
}
}
}
/// <summary>
/// 删除目录
/// </summary>
/// <param name="sourceDir">删除目录地址</param>
public void DeleteDirectory(string sourceDir)
{
if (Directory.Exists(sourceDir))
{
// 删除目录中的所有文件
Directory.Delete(sourceDir, recursive: true);
}
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="sourceDir">删除文件地址</param>
public void DeleteFile(string sourceDir)
{
if (File.Exists(sourceDir))
{
File.Delete(sourceDir);
}
}
}