Browse Source

fix: 修复cli重命名文件名

main
wangjunzzz 4 weeks ago
parent
commit
30eb34ab61
  1. 54
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ReplaceHelper.cs

54
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ReplaceHelper.cs

@ -1,4 +1,4 @@
namespace Lion.AbpPro.Cli.Utils;
namespace Lion.AbpPro.Cli.Utils;
public static class ReplaceHelper
{
@ -50,26 +50,64 @@ public static class ReplaceHelper
string moduleName,
string version,
bool vben5)
{
// 先收集所有需要重命名的目录,按深度排序(深的先处理)
var directoriesToRename = new List<(DirectoryInfo DirectoryInfo, string NewDirectoryPath)>();
CollectDirectoriesToRename(sourcePath, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, version, vben5, directoriesToRename);
// 按路径深度降序排序,确保先处理深层目录,再处理父目录
var sortedDirectories = directoriesToRename
.OrderByDescending(d => d.DirectoryInfo.FullName.Count(c => c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar))
.ToList();
foreach (var (directoryInfo, newDirectoryPath) in sortedDirectories)
{
if (directoryInfo.FullName != newDirectoryPath)
{
try
{
directoryInfo.MoveTo(newDirectoryPath);
}
catch (IOException ex)
{
// 如果目录被占用,等待重试
Thread.Sleep(100);
directoryInfo.MoveTo(newDirectoryPath);
}
}
}
}
private static void CollectDirectoriesToRename(
string sourcePath,
string oldCompanyName,
string oldProjectName,
string oldModuleName,
string companyName,
string projectName,
string moduleName,
string version,
bool vben5,
List<(DirectoryInfo DirectoryInfo, string NewDirectoryPath)> directoriesToRename)
{
var directories = Directory.GetDirectories(sourcePath);
foreach (var subDirectory in directories)
{
RenameAllDirectories(subDirectory, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, version, vben5);
var directoryInfo = new DirectoryInfo(subDirectory);
// 先递归收集子目录
CollectDirectoriesToRename(subDirectory, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, version, vben5, directoriesToRename);
// 检查当前目录是否需要重命名
if (directoryInfo.Name.Contains(oldCompanyName) ||
directoryInfo.Name.Contains(oldProjectName) ||
directoryInfo.Name.Contains(oldModuleName))
{
var oldDirectoryName = directoryInfo.Name;
var newDirectoryName = oldDirectoryName.CustomReplace(oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, version, vben5);
var newDirectoryPath = Path.Combine(directoryInfo.Parent?.FullName, newDirectoryName);
if (directoryInfo.FullName != newDirectoryPath)
{
directoryInfo.MoveTo(newDirectoryPath);
}
directoriesToRename.Add((directoryInfo, newDirectoryPath));
}
}
}

Loading…
Cancel
Save