找出文件夹循环引用

本文关键字:引用 循环 文件夹 | 更新日期: 2023-09-27 18:36:23

假设我有一个应用程序,可以将放置在主文件夹中的文件传输到其他位置。

例如,用户可以按如下方式配置应用程序:

If placed in C:'X'A Transfer to C:'Z'A
If placed in C:'Y'B Transfer to C:'Z'B
. . .
. . .

到现在为止,一切都很好。但以下配置将创建无限传输循环:

if placed in C:'X'A Transfer to C:'Z'A
if placed in C:'Z'A Transfer to C:'Z'B
if placed in C:'Z'B Transfer to C:'X'A

这样的层次结构可能会变得非常复杂。预测它们并首先防止此类配置的最佳方法是什么?

找出文件夹循环引用

假设有一个这样的类:

class Rule
{
    public string sourceDir; // dir file placed
    public string targetDir; // dir to move to
}

还有一个字典,其中包含由名为 rules sourceDir索引的所有规则。

你可以编写这样的函数:

public bool RuleCausesCycle(Rule rule)
{
    return RuleCausesCycle(rule, new HashSet(CaseInsensitiveComparer.Default));
}
private bool RuleCausesCycle(Rule rule, Set visited)
{
     Rule targetRule;
     if (visited.Contains(rule.sourceDir))
     {
         return true;
     }
     if (rules.TryGetValue(rule.targetDir, out targetRule))
     {
         visited.Add(rule.sourceDir);
         return RuleCausesCycle(targetRule, visited);
     }
     return false;
}

你基本上是在有向图中寻找周期。我会使用像QuickGraph这样的图形库:http://quickgraph.codeplex.com/wikipage?title=Strongly%20Connected%20Components&referringTitle=Documentation