加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
UpdateControl.cs 4.12 KB
一键复制 编辑 原始数据 按行查看 历史
guangbo 提交于 2024-11-06 16:38 . 进程间通讯
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);
}
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化