/// <summary> /// 取得本地地址. /// </summary> /// <returns>本地地址.</returns> /// <param name="iFullPath">全路径.</param> /// <param name="iEndMark">结束位.</param> private string GetLocalFilePath(FileInfo iFileInfo, string iEndMark) { if (null == iFileInfo) { return(null); } MatchDirInfo _matchedDirLink = this.CreateMatchDirLink(iFileInfo.Directory, iEndMark); string _localFilePath = null; while (null != _matchedDirLink) { if (true == string.IsNullOrEmpty(_localFilePath)) { _localFilePath = _matchedDirLink.Name; } else { _localFilePath = string.Format("{0}/{1}", _localFilePath, _matchedDirLink.Name); } _matchedDirLink = _matchedDirLink.Next; } if (true == string.IsNullOrEmpty(_localFilePath)) { return(null); } return(string.Format("{0}/{1}", _localFilePath, iFileInfo.Name)); }
/// <summary> /// 取得与目标匹配度(0.0f ~ 1.0f). /// </summary> /// <returns>与目标匹配度(0.0f ~ 1.0f).</returns> /// <param name="iSelf">自身.</param> /// <param name="iTarget">目标.</param> private float GetMatchFromDir(DirectoryInfo iSelf, DirectoryInfo iTarget) { float _match = 0.0f; if ((null == iSelf) || (null == iTarget)) { return(_match); } DirectoryInfo endDir = new DirectoryInfo(Application.dataPath); MatchDirInfo _selfMatch = this.CreateMatchDirLink(iSelf, endDir.Name); MatchDirInfo _targetMatch = this.CreateMatchDirLink(iTarget, endDir.Name); if ((null == _selfMatch) || (null == _selfMatch)) { return(_match); } // 计算匹配度 int maxCount = 0; int matchedCount = 0; while (null != _targetMatch) { if ((null != _targetMatch) && (null != _selfMatch) && (true == _targetMatch.Name.Equals(_selfMatch.Name))) { ++matchedCount; } if (null != _targetMatch) { _targetMatch = _targetMatch.Next; } if (null != _selfMatch) { _selfMatch = _selfMatch.Next; } ++maxCount; } _match = (0 >= maxCount) ? 0.0f : ((float)matchedCount / (float)maxCount); return(_match); }
/// <summary> /// 创建目录匹配链表. /// </summary> /// <returns>目录匹配链表.</returns> /// <param name="iDirInfo">目录信息.</param> /// <param name="iEndMark">结束标识.</param> private MatchDirInfo CreateMatchDirLink(DirectoryInfo iDirInfo, string iEndMark) { if (null == iDirInfo) { return(null); } if (true == string.IsNullOrEmpty(iEndMark)) { return(null); } MatchDirInfo _curDir = new MatchDirInfo(); _curDir.Name = iDirInfo.Name; DirectoryInfo _parent = iDirInfo.Parent; while (null != _parent) { MatchDirInfo _prevDir = new MatchDirInfo(); _prevDir.Name = _parent.Name; _curDir.Prev = _prevDir; _prevDir.Next = _curDir; if (true == iEndMark.Equals(_parent.Name)) { _parent = null; } else { _parent = _parent.Parent; } _curDir = _prevDir; } return(_curDir); }