当前位置: 代码迷 >> 综合 >> C++ QT:计算一个路径相对于另一个路径的相对路径,及其反算
  详细解决方案

C++ QT:计算一个路径相对于另一个路径的相对路径,及其反算

热度:6   发布时间:2024-02-02 17:51:42.0

计算相对路径

/*
## 求   某文件集合B  相对于 某文件A 的相对路径
@fileName 某文件A路径
@list 某文件路径的集合B
*/QStringList calcRelativePath(QString fileName, QStringList list)
{QStringList relativeList;QDir dir(fileName);for each (QString str in list){if (str.at(0) == fileName.at(0)) {QString temp = dir.relativeFilePath(str);relativeList.append(temp);}else{// 两个路径不在同一个盘符relativeList.append(str);}}return relativeList;
}

   

反算绝对路径

/*
##根据 某文件集合B  相对于 某文件A 的相对路径 反算绝对路径
@fileName 某文件A路径
@list 某文件路径的集合B
*/
QStringList  calcAbsolutePath(QString fileName, QStringList  list)
{QStringList absoluteList;for each (QString str in list){if (str.at(1) == ':') {//若绝对路径,则直接追加到集合中absoluteList.append(str);}else{QDir dir(fileName);while (str.startsWith("../")){str.remove(0, 3);dir.cdUp();}QString temp = dir.absoluteFilePath(str);absoluteList.append(temp);}}return absoluteList;
}

  下面贴上一段手算的相对路径....

QStringList calcRelativePath(QString fileName, QStringList  list)
{QStringList relativePath;for each (QString str in list){QString tempFileName = fileName;//盘符是否相同,如果不同,则当前的即为相对路径if (fileName[0] == str[0])continue;//找到相同的父目录int flagInDiffer;for (int i = 0; i < (fileName.size() > str.size() ? fileName.size() : str.size()); i++) {if (fileName[i] != str[i]) {flagInDiffer = i;break;}}int flagSamePath;for (int i = flagInDiffer; i >-1; i--) {if (str[i] == "/") {flagSamePath = i;break;}}tempFileName.remove(0,flagSamePath);str.remove(0, flagSamePath);int hasSlashNum = str.size();tempFileName.remove("/");int parentDirectoryNum = tempFileName.size() - hasSlashNum-1;for (int i=0;i<parentDirectoryNum;i++) {str.prepend("../");}relativePath.append(str);}return relativePath;
}

有问题就讲,作者水平有限,看看就好。