我需要接收绝对文件path
C:/Users/Dima/YandexDisk/_Application/WeldAnalysis/ExperimentDefaults.xlsx
从QRC文件的path一样
:/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
被销毁时,临时目录也被删除,因此你的文件。 您可以通过禁用自动删除功能来避免这种情况: tempDir.setAutoRemove(false)
并在完成提取的文件时手动删除临时目录。