代码拉取完成,页面将自动刷新
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
namespace StudentSynchronization.Daemon
{
public class UpdateControl
{
public static void Run(string usbDrivePath)
{
var pro = ProcessData.processlist.FirstOrDefault();
if (pro == null) return;
var findpro = Process.GetProcessesByName(pro.Name.Replace(".exe", "")).FirstOrDefault(p => p.MainModule.FileName == pro.Path + Path.DirectorySeparatorChar + pro.Name);
if (findpro != null && findpro.Id > 0)
{
findpro.Kill();
}
pro.IsRestart = false;
string targetPath = @"C:\Users\Administrator\Desktop\net8.0-windows"; // 替换为目标路径
string logFilePath = Path.Combine(usbDrivePath, "operation_log.txt");
try
{
// 遍历U盘中的文件和文件夹并进行替换
TraverseAndReplace(usbDrivePath, targetPath, logFilePath);
}
catch (Exception ex)
{
// 记录异常到日志文件
LogWithTimestamp(logFilePath, "操作失败: " + ex.Message);
}
pro.IsRestart = true;
}
static void TraverseAndReplace(string sourcePath, string targetPath, string logFilePath)
{
// 获取源路径中的所有文件和文件夹(递归)
var allSourceFiles = Directory.GetFiles(sourcePath, "*", SearchOption.AllDirectories);
var allSourceDirs = Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories);
// 确保目标路径存在(如果不存在则创建)
Directory.CreateDirectory(targetPath);
// 处理文件
foreach (var sourceFile in allSourceFiles)
{
string relativePath = sourceFile.Substring(sourcePath.Length + 1).Replace(Path.DirectorySeparatorChar.ToString(), "\\"); // 获取相对路径并修正分隔符
string destFile = Path.Combine(targetPath, relativePath);
// 创建目标文件的目录(如果不存在)
Directory.CreateDirectory(Path.GetDirectoryName(destFile));
// 如果目标文件存在,则删除并记录日志
if (File.Exists(destFile))
{
File.Delete(destFile);
LogWithTimestamp(logFilePath, "删除文件: " + destFile);
}
// 复制文件并记录日志
File.Copy(sourceFile, destFile, true);
LogWithTimestamp(logFilePath, "复制文件: " + sourceFile + " 到 " + destFile);
}
// 处理文件夹(通常文件夹会通过文件复制隐含处理,但这里可以记录空文件夹的创建)
foreach (var sourceDir in allSourceDirs)
{
string relativePath = sourceDir.Substring(sourcePath.Length + 1).Replace(Path.DirectorySeparatorChar.ToString(), "\\"); // 获取相对路径并修正分隔符
string destDir = Path.Combine(targetPath, relativePath);
// 如果目标文件夹不存在且不是源路径本身(避免重复创建源路径),则创建并记录日志
if (!Directory.Exists(destDir) && !string.Equals(sourcePath, sourceDir.TrimEnd(Path.DirectorySeparatorChar), StringComparison.OrdinalIgnoreCase))
{
Directory.CreateDirectory(destDir);
LogWithTimestamp(logFilePath, "创建文件夹: " + destDir);
}
// 注意:如上所述,文件夹的“替换”通常是通过文件复制来隐含完成的。
}
}
static void LogWithTimestamp(string logFilePath, string message)
{
// 获取当前时间戳并格式化
string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
// 将时间戳和消息写入日志文件
File.AppendAllText(logFilePath, Environment.NewLine + timestamp + " " + message);
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。