Получить относительный путь из файла в Qt

Я пытаюсь получить относительный путь от файлов, которые я бы хотел написать. Вот ситуация:

Я сохраняю файл conf в D:\confs\conf.txt. У меня в моих программах несколько файлов, считанных с D:\images\image.bmp. В моем conf.txt я хотел бы иметь ../images/image.bmp.

Я вижу некоторые полезные классы, такие как QDir или QFileInfo, но я не знаю, что лучше использовать. Я пробовал:

QDir dir("D:/confs");
dir.filePath(D:/images/image.bmp) // Just return the absolute path of image.bmp

Я прочитал документ, и он говорит, что filePath работает только с файлами в каталоге dir (здесь D:\confs), но мне интересно, есть ли способ указать поиск из другого каталога и получить его относительный путь.

Ответы

Ответ 1

Вы ищете следующий метод:

QString QDir:: relativeFilePath (const QString и имя_файла) const

Возвращает путь к fileName относительно каталога.

QDir dir("/home/bob");
QString s;

s = dir.relativeFilePath("images/file.jpg");     // s is "images/file.jpg"
s = dir.relativeFilePath("/home/mary/file.txt"); // s is "../mary/file.txt"

Адаптируя свой код в соответствии с приведенными выше примерами, он будет выглядеть следующим образом:

QDir dir("D:/confs");
dir.relativeFilePath("D:/images/image.bmp") // Just return the absolute path of image.bmp
//           ^                   ^

В целом, то, что вы делаете, может быть плохой идеей, так как он будет соединять пути конфигурации и образа вместе. То есть если вы перемещаете любой из них, приложение перестает работать.

Также обратите внимание на недостающие кавычки.

Ответ 2

QDir dir("D:/confs");
dir.relativeFilePath("D:/images/image.bmp");