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; } } }
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_; }
public static bool CompareFile(PathNode lnode, PathNode rnode, PathNodeCompareParam cmpParam) { return(CompareFile(lnode, rnode, cmpParam.IsCompareName, cmpParam.IsCompareFileSize, cmpParam.IsCompareLastWriteTime, cmpParam.IsCompareChecksum)); }