Skip to content

Commit

Permalink
Merge pull request #43 from lindexi/t/lindexi/MergeSkip
Browse files Browse the repository at this point in the history
  • Loading branch information
walterlv authored Jan 1, 2025
2 parents 610b165 + 8a78ce7 commit 7b562b1
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,10 @@ public enum DirectoryOverwriteStrategy
/// 合并式覆盖。如果目标路径存在文件夹,则会按文件覆盖掉目标文件夹中的全部文件。即目标文件夹中只有相同相对路径的文件会被覆盖,其他文件依然存在。
/// </summary>
MergeOverwrite,

/// <summary>
/// 合并式跳过。如果目标路径存在文件夹,则会跳过目标文件夹中所存在的文件,只复制不存在的文件。
/// </summary>
MergeSkip,
}
}
25 changes: 24 additions & 1 deletion src/Utils/Walterlv.IO.PackageManagement/PackageDirectory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,18 @@ public static IOResult Move(DirectoryInfo sourceDirectory, DirectoryInfo targetD
foreach (var file in sourceDirectory.EnumerateFiles())
{
var targetFilePath = Path.Combine(targetDirectory.FullName, file.Name);

if (overwrite == DirectoryOverwriteStrategy.MergeSkip && File.Exists(targetFilePath))
{
// 合并式跳过,如果目标文件存在,则跳过。
continue;
}

#if NETCOREAPP3_0_OR_GREATER
file.MoveTo(targetFilePath, overwrite: true);
#else
file.MoveTo(targetFilePath);
#endif
}

foreach (DirectoryInfo directory in sourceDirectory.EnumerateDirectories())
Expand Down Expand Up @@ -322,7 +333,14 @@ public static IOResult Copy(DirectoryInfo sourceDirectory, DirectoryInfo targetD
foreach (var file in sourceDirectory.EnumerateFiles())
{
var targetFilePath = Path.Combine(targetDirectory.FullName, file.Name);
file.CopyTo(targetFilePath, true);

if (overwrite == DirectoryOverwriteStrategy.MergeSkip && File.Exists(targetFilePath))
{
// 合并式跳过,如果目标文件存在,则跳过。
continue;
}

file.CopyTo(targetFilePath, overwrite: true);
}

foreach (DirectoryInfo directory in sourceDirectory.EnumerateDirectories())
Expand Down Expand Up @@ -471,6 +489,11 @@ private static IOResult DeleteIfOverwrite(DirectoryInfo targetDirectory, Directo
// 如果是合并式覆盖,那么不需要删除,也不需要抛异常,直接覆盖即可。
}
break;
case DirectoryOverwriteStrategy.MergeSkip:
{
// 如果是合并式跳过,那么不需要删除,也不需要抛异常,直接跳过即可。
}
break;
default:
break;
}
Expand Down

0 comments on commit 7b562b1

Please sign in to comment.