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 に答える
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 に答える