我用C ++和Qt编码。
我想按照符号链接获取QFileInfo
的绝对路径。
例如,/usr/local/extra
是/home/extra
的符号链接。
然后我需要将/usr/local/extra/my_directory/
转换为/home/extra/my_directory
。
我尝试QFileInfo(path).canonicalPath()
但它只返回父目录。
答案 0 :(得分:1)
使用QFileInfo :: canonicalFilePath()代替。 canonicalPath()总是返回父目录,而canonicalFilePath()实际上包含文件(或目录)本身。
答案 1 :(得分: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".
答案 2 :(得分:0)
QFileInfo::symLinkTarget()
怎么样?
QString QFileInfo :: symLinkTarget()const返回到的绝对路径 符号链接(或Windows上的快捷方式)指向的文件或目录,或 如果对象不是符号链接,则为空字符串。这个名字可能 不代表现有文件;它只是一个字符串。 如果符号链接指向现有文件,则QFileInfo :: exists()返回true 文件。此功能在Qt 4.2中引入。另请参见exist(), isSymLink(),isDir()和isFile()。