如何将Qt文件路径从资源路径转换为绝对路径?
How to convert Qt file path from resource to absolute path?
我需要接收绝对文件路径,如
C:/Users/Dima/YandexDisk/_Application/WeldAnalysis/ExperimentDefaults.xlsx
来自 QRC 文件的路径,例如
:/Data/ExperimentDefaults.xlsx
.
我该怎么做?
资源全部打包到QRC文件中,不暴露给文件系统,因此无法转换为标准路径;这就像访问 zip 文件中的文件。
你愿意用这样的文件路径做什么? QFile
可以处理资源路径 (":/..."
) 并打开此类文件,但其他文件处理 API 不能(例如 C 的 fopen
或 C++ 的 std::ifstream
)。此外,出于同样的原因,如果作为参数传递,非 Qt 应用程序将无法打开此类文件。
您的选项包括:
使用 QFile
打开文件并使用相关的 Qt 类 读取它(假设你正在处理一个 Excel 文件,我认为它不值得努力,除非你有一些图书馆从内存缓冲区读取它)。
将资源容器中的文件复制到一个临时目录(您可以使用 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
被销毁时,临时目录也会被删除,因此你的文件。您可以通过禁用 auto-remove 功能来避免这种情况:tempDir.setAutoRemove(false)
并在完成提取文件后手动删除临时目录。
我需要接收绝对文件路径,如
C:/Users/Dima/YandexDisk/_Application/WeldAnalysis/ExperimentDefaults.xlsx
来自 QRC 文件的路径,例如
:/Data/ExperimentDefaults.xlsx
.
我该怎么做?
资源全部打包到QRC文件中,不暴露给文件系统,因此无法转换为标准路径;这就像访问 zip 文件中的文件。
你愿意用这样的文件路径做什么? QFile
可以处理资源路径 (":/..."
) 并打开此类文件,但其他文件处理 API 不能(例如 C 的 fopen
或 C++ 的 std::ifstream
)。此外,出于同样的原因,如果作为参数传递,非 Qt 应用程序将无法打开此类文件。
您的选项包括:
使用
QFile
打开文件并使用相关的 Qt 类 读取它(假设你正在处理一个 Excel 文件,我认为它不值得努力,除非你有一些图书馆从内存缓冲区读取它)。将资源容器中的文件复制到一个临时目录(您可以使用
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
被销毁时,临时目录也会被删除,因此你的文件。您可以通过禁用 auto-remove 功能来避免这种情况:tempDir.setAutoRemove(false)
并在完成提取文件后手动删除临时目录。