私は C++ と Qt でコーディングしています。
シンボリックリンクをたどり、で絶対パスを取得したいQFileInfo
。
たとえば、/usr/local/extra
は のシンボリック リンクです/home/extra
。次に、に変換する必要があり/usr/local/extra/my_directory/
ます/home/extra/my_directory
。
試しQFileInfo(path).canonicalPath()
ましたが、親ディレクトリのみが返されます。
代わりに QFileInfo::canonicalFilePath() を使用してください。canonicalPath() は常に親ディレクトリを返しますが、 canonicalFilePath() は実際にはファイル (またはディレクトリ) 自体を含みます。
質問した後、解決策を見つけたと思います。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".