fix(VHDManager): 改进package文件夹搜索逻辑并添加错误处理

优化package文件夹的搜索流程,先在根目录查找,未找到时再递归搜索
添加详细的日志输出和错误处理,便于排查问题
This commit is contained in:
Lannamokia
2025-08-08 15:26:24 +08:00
parent c915090ac0
commit 0183560f00
+44 -5
View File
@@ -177,20 +177,59 @@ exit";
StatusChanged?.Invoke("正在搜索package文件夹...");
if (!Directory.Exists(TARGET_DRIVE))
{
StatusChanged?.Invoke($"目标驱动器 {TARGET_DRIVE} 不存在");
return null;
}
return await Task.Run(() =>
{
try
{
var directories = Directory.GetDirectories(TARGET_DRIVE, "*", SearchOption.AllDirectories)
.Where(d => Path.GetFileName(d).ToLower() == "package")
.FirstOrDefault();
StatusChanged?.Invoke($"开始在 {TARGET_DRIVE} 中搜索package文件夹...");
return directories;
// 首先检查根目录
var rootDirs = Directory.GetDirectories(TARGET_DRIVE)
.Select(d => new { Path = d, Name = Path.GetFileName(d) })
.ToList();
StatusChanged?.Invoke($"根目录下找到 {rootDirs.Count} 个文件夹:");
foreach (var dir in rootDirs)
{
StatusChanged?.Invoke($" - {dir.Name}");
Debug.WriteLine($"根目录文件夹: {dir.Name}");
}
// 检查根目录中是否有package文件夹(不区分大小写)
var packageInRoot = rootDirs.FirstOrDefault(d =>
string.Equals(d.Name, "package", StringComparison.OrdinalIgnoreCase));
if (packageInRoot != null)
{
StatusChanged?.Invoke($"在根目录找到package文件夹: {packageInRoot.Path}");
return packageInRoot.Path;
}
// 如果根目录没有,递归搜索所有子目录
StatusChanged?.Invoke("根目录未找到package文件夹,开始递归搜索...");
var allDirectories = Directory.GetDirectories(TARGET_DRIVE, "*", SearchOption.AllDirectories)
.Where(d => string.Equals(Path.GetFileName(d), "package", StringComparison.OrdinalIgnoreCase))
.ToList();
StatusChanged?.Invoke($"递归搜索找到 {allDirectories.Count} 个package文件夹");
foreach (var dir in allDirectories)
{
StatusChanged?.Invoke($" 找到: {dir}");
Debug.WriteLine($"找到package文件夹: {dir}");
}
return allDirectories.FirstOrDefault();
}
catch
catch (Exception ex)
{
StatusChanged?.Invoke($"搜索package文件夹时出错: {ex.Message}");
Debug.WriteLine($"FindPackageFolder错误: {ex}");
return null;
}
});