我正在使用 C++ 和 Qt 进行编码。
我想按照符号链接获取绝对路径QFileInfo
。
例如,/usr/local/extra
是 的符号链接/home/extra
。然后我需要转换/usr/local/extra/my_directory/
为/home/extra/my_directory
.
我试过QFileInfo(path).canonicalPath()
了,但它只返回父目录。
请改用 QFileInfo::canonicalFilePath() 。canonicalPath() 总是返回父目录,而 canonicalFilePath() 实际上包括文件(或目录)本身。
怎么样QFileInfo::symLinkTarget()
?
QString QFileInfo::symLinkTarget() const 返回符号链接(或 Windows 上的快捷方式)指向的文件或目录的绝对路径,如果对象不是符号链接,则返回空字符串。此名称可能不代表现有文件;它只是一个字符串。如果符号链接指向现有文件,QFileInfo::exists() 返回 true。这个函数是在 Qt 4.2 中引入的。另请参见 exists()、isSymLink()、isDir() 和 isFile()。
在我提出问题后,我想我找到了解决方案。我应该使用QDir(path).canonicalPath()
而不是QFileInfo(path).canonicalPath()
.
QString QDir::canonicalPath () const 返回规范路径,即没有符号链接或冗余“.”的路径。或“..”元素。在没有符号链接的系统上,此函数将始终返回与 absolutePath() 返回的字符串相同的字符串。如果规范路径不存在(通常是由于悬挂的符号链接) canonicalPath() 返回一个空字符串。例子:
// where /local/bin is a symlink to /usr/bin
QString bin = "/local/bin";
QDir binDir(bin);
QString canonicalBin = binDir.canonicalPath();
// canonicalBin now equals "/usr/bin"
QString ls = "/local/bin/ls"; // where ls is the executable "ls"
QDir lsDir(ls);
QString canonicalLs = lsDir.canonicalPath();
// canonicalLS now equals "/usr/bin/ls".