2

我正在使用 C++ 和 Qt 进行编码。

我想按照符号链接获取绝对路径QFileInfo

例如,/usr/local/extra是 的符号链接/home/extra。然后我需要转换/usr/local/extra/my_directory//home/extra/my_directory.

我试过QFileInfo(path).canonicalPath()了,但它只返回父目录。

4

3 回答 3

4

请改用 QFileInfo::canonicalFilePath() 。canonicalPath() 总是返回父目录,而 canonicalFilePath() 实际上包括文件(或目录)本身。

于 2013-04-30T07:21:34.943 回答
1

怎么样QFileInfo::symLinkTarget()

QString QFileInfo::symLinkTarget() const 返回符号链接(或 Windows 上的快捷方式)指向的文件或目录的绝对路径,如果对象不是符号链接,则返回空字符串。此名称可能不代表现有文件;它只是一个字符串。如果符号链接指向现有文件,QFileInfo::exists() 返回 true。这个函数是在 Qt 4.2 中引入的。另请参见 exists()、isSymLink()、isDir() 和 isFile()。

于 2019-07-01T18:25:41.607 回答
0

在我提出问题后,我想我找到了解决方案。我应该使用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".
于 2013-04-30T07:19:15.253 回答