Exemple #1
0
        public void UpdateCorresponding(PathNode parentNode, PathNodeCompareParam cmpParam)
        {
            if (parentNode.CorrespondingNode != null && parentNode.IsCustomCorresponding)
            {
                return;
            }

            isEqual_ = false;

            //目录仅比较名称
            if (this.IsDirectory)
            {
                CorrespondingNode = parentNode.GetDirectoryNode(this.Name);
                if (CorrespondingNode == null || CorrespondingNode.HasCustomCorresponding)
                {
                    CorrespondingNode      = null;
                    isCustomCorresponding_ = false;
                }
                else
                {
                    CorrespondingNode.correspondingNode_     = this;
                    CorrespondingNode.isCustomCorresponding_ = false;
                }
                return;
            }

            //文件需要强制比较
            foreach (PathNode node in parentNode.Files)
            {
                if (PathNodeComparer.CompareFile(this, node, cmpParam))
                {
                    this.correspondingNode_ = node;
                    this.isEqual_           = true;
                    node.correspondingNode_ = this;
                    node.isEqual_           = true;
                    break;
                }
            }
        }
Exemple #2
0
        public void UpdateCorrespondingRecursive(PathNode rootNode, PathNodeCompareParam cmpParam)
        {
            if (!this.IsDirectory)
            {
                throw new Exception("无法对文件节点递归更新!");
            }

            isEqual_ = true;

            foreach (PathNode fileNode in childFiles_.Values)
            {
                fileNode.UpdateCorresponding(rootNode, cmpParam);
                isEqual_ = isEqual_ && fileNode.isEqual_;
            }

            foreach (PathNode dirNode in childDirs_.Values)
            {
                dirNode.UpdateCorresponding(rootNode, cmpParam);
                PathNode node = dirNode.correspondingNode_;
                if (node == null)
                {
                    isEqual_ = false;
                }
                else
                {
                    dirNode.UpdateCorrespondingRecursive(node, cmpParam);
                    isEqual_ = isEqual_ && dirNode.isEqual_;
                }
            }

            if (isEqual_ == true)
            {
                isEqual_ =
                    (childDirs_.Count == rootNode.childDirs_.Count) && (childFiles_.Count == rootNode.childFiles_.Count);
            }

            rootNode.isEqual_ = isEqual_;
        }
Exemple #3
0
 public static bool CompareFile(PathNode lnode, PathNode rnode, PathNodeCompareParam cmpParam)
 {
     return(CompareFile(lnode, rnode, cmpParam.IsCompareName, cmpParam.IsCompareFileSize, cmpParam.IsCompareLastWriteTime, cmpParam.IsCompareChecksum));
 }