using System.IO.Compression; using MasstransferCommon.Utils; using MasstransferInfrastructure.OTA.Model; namespace MasstransferInfrastructure.OTA.Client; public class OTAClient { /// /// 检查更新 /// /// /// public async Task CheckForUpdate(string updateUrl) { return await ApiClient.GetAsync(updateUrl); } /// /// 下载更新 /// /// /// public async Task DownloadUpdateAsync(string downloadUrl, string filePath) { await ApiClient.DownloadFileAsync(downloadUrl, filePath); } /// /// 备份保存重要文件 /// /// 源地址 /// 目标地址 /// 保存文件扩展名 /// 保存文件日志 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); } } } /// /// 恢复重要文件 /// /// 重要文件备份日志 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}"); } } /// /// 压缩目录 /// /// 源目录地址 /// 压缩文件保存地址 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); } } } /// /// 解压缩目录 /// /// 压缩文件地址 /// 解压目录 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); } } } /// /// 删除目录 /// /// 删除目录地址 public void DeleteDirectory(string sourceDir) { if (Directory.Exists(sourceDir)) { // 删除目录中的所有文件 Directory.Delete(sourceDir, recursive: true); } } /// /// 删除文件 /// /// 删除文件地址 public void DeleteFile(string sourceDir) { if (File.Exists(sourceDir)) { File.Delete(sourceDir); } } }