23

I am trying to get the relative path from files that I would like to write. Here a situation:

I save a conf file in D:\confs\conf.txt. I have in my programs some files read from D:\images\image.bmp. In my conf.txt I would like to have ../images/image.bmp.

I see some useful classes like QDir or QFileInfo but I don't know what it's the best to use. I tried:

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

I read the doc and it says filePath only work with files in the dir set (here D:\confs) but I wonder if there is a way to indicate to search from a different dir and get his relative path.

László Papp
  • 51,870
  • 39
  • 111
  • 135
user3627590
  • 281
  • 1
  • 4
  • 10

2 Answers2

21

You are looking for the following method:

QString QDir::relativeFilePath(const QString & fileName) const

Returns the path to fileName relative to the directory.

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"

Adapting your code according to the examples above, it will look as follows:

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

Overall, what you do might be a bad idea since it will couple the config and image paths together. I.e. if you move either of them, the application stops working.

Please also notice the missing quotes.

Community
  • 1
  • 1
László Papp
  • 51,870
  • 39
  • 111
  • 135
  • Thanks it's works great. I should have read more carefully about the doc about QDir. I know it could be risky, but the confs could be exported for other computers so if the conf folder and the images forlder (respecting theirs relative path) are exported in same time, the application will not crash. – user3627590 Jun 03 '14 at 06:56
4
QDir dir("D:/confs");
dir.relativeFilePath("D:/images/image.bmp");
ch0kee
  • 736
  • 4
  • 12