Как преобразовать путь файла Qt из ресурса в абсолютный путь?

Мне нужно получить абсолютный путь к файлу, как

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

из пути файла QRC, как

:/Data/ExperimentDefaults.xlsx,

Как я могу это сделать?

4

Решение

Ресурсы упакованы все вместе в файл 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) и вручную удалить временный каталог, когда вы закончите с извлеченным файлом.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]