Example #1
0
        /// <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));
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }