Мне нужно получить абсолютный путь к файлу, как
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
уничтожен, временный каталог также удален, поэтому ваш файл. Вы можете избежать этого, отключив авто-удалить особенность: tempDir.setAutoRemove(false)
и вручную удалить временный каталог, когда вы закончите с извлеченным файлом.
Других решений пока нет …