2017-05-09 34 views
2

私はQtファイルパスをリソースから絶対パスに変換するには?

:/Data/ExperimentDefaults.xlsxのようなQRCファイルのパスから

C:/Users/Dima/YandexDisk/_Application/WeldAnalysis/ExperimentDefaults.xlsx

のような絶対ファイルパスを受信する必要があります。

どうすればいいですか?

+1

'qrc'自体がファイルであり、実行可能ファイルに埋め込まれ、もはやOSファイルシステムにマップされていないリソースファイルの集合です。あなたが 'qrc'ファイル内のファイルパスを見ることができるとしても、それらはすべて一つの集合的なリソースファイルに圧縮されているはずです。 – AlexanderVX

+0

リソースファイルdir。アプリケーション自体の1つで、これは役立つでしょう:['QCoreApplication :: applicationDirPath()'](http://doc.qt.io/qt-5/qcoreapplication.html#applicationDirPath)静的。私はこれを[SO:Qtアプリケーションのインストールディレクトリを見つける方法?]で見つけましたか?(http://stackoverflow.com/questions/19057482/how-to-find-the-installation-directory-of-a-qt-応用)。 – Scheff

+0

[Qt resource doc](http://doc.qt.io/qt-5/resources.html)によれば、データがバイナリにコンパイルされているため、 –

答えて

1

リソースはすべてQRCファイルにまとめられており、ファイルシステムに公開されていないため、標準パスに変換することはできません。 zipファイル内のファイルにアクセスするようなものです。

このようなファイルパスで何をしたいですか? QFileはリソースパス(":/...")を処理し、そのようなファイルを開くことができますが、他のファイル処理API(CのfopenやC++のstd::ifstreamなど)は処理できません。また、同様の理由から、非Qtアプリケーションは、パラメータとして渡された場合、そのようなファイルを開くことができません。

のオプションは、あなたが含まれています:

  • QFileを使用して、Excelファイルを扱っている与えられた、あなたが持っていない限り、私は、それは努力する価値はないと思います(関連Qtのクラスを使用してそれを読んでファイルを開きますいくつかのライブラリをメモリバッファから読み込みます)。

  • は(あなたが1を作成するためにQTemporaryDirを使用することができます)一時ディレクトリへのリソースコンテナの外にファイルをコピーして、そこからファイルを使用します。場合にのみことに注意して

    QTemporaryDir tempDir; 
    if (tempDir.isValid()) { 
        const QString tempFile = tempDir.path() + "/yourfile.xlsx"; 
        if (QFile::copy(":/yourfile.xlsx", tempFile)) { 
        // your file is now extracted to the filesystem 
        } 
    } 
    

tempDir一時ディレクトリも削除されるため、ファイルも削除されます。これを回避するには、機能を無効にします(tempDir.setAutoRemove(false))。また、抽出したファイルを終了するときに手動で一時ディレクトリを削除します。

関連する問題