Unsolved Path/Directory separator inconsistent.
-
@SPlatten said in Path/Directory separator inconsistent.:
It's all just messy and requires thought and effort when it should be handled internally.
it is handled internally, thats the point. The only possibly confusing point could be, that QDir has no QDir::QtSeperator() that returns a QChar('/'); that you could use.
Simply write
QChar separator('/'); if (!path.endsWith(separator) { path += separator; }
and use toNativeSeperators, if you actually need the native part, for example to display the path or to hand it of to an external non qt program
-
@SPlatten said in Path/Directory separator inconsistent.:
It's all just messy and requires thought and effort when it should be handled internally.
There is no mess here, it is clearly documented:
- QDir always use '/' as path separator. So path string can the same on every system for which your application is build
QDir::separator()
gives you the system path separator on which application is runningQDir::toNativeSeparators()
, will convert the given string to a string usingQDir::separator()
so it will be acceptable by the system.QDir:cleanPath()
, will ensure you path has no redondant separators, and use '/' as separator
So your code is wrong.
This could work:QString newPath(QDir::cleanPath(path)); if (!newPath.endsWith('/')) { newPath += '/'; }
-
@KroMignon , I'm writing an application that uses paths that may be supplied in text files, the application should not rely on what the Qt library uses.
-
@SPlatten said in Path/Directory separator inconsistent.:
I'm writing an application that uses paths that may be supplied in text files, the application should not rely on what the Qt library uses.
And what is the problem with that?
Simply useQDir:cleanPath()
to ensure your path string is correct. -
@SPlatten said in Path/Directory separator inconsistent.:
@JonB, you can't pass QDir::separator() to QDir::toNativeSeparators as there is only one version of this function and it expects a QString not a QChar.
Why do you make this kind of statement without checking?
QString sep = QDir::toNativeSeparators(QDir::separator());
-
I did exactly that, in the version of Qt Creator I'm using there is only one function.
-
@SPlatten
No, you did not try the code! There is just the one function in my version of Qt too! And it accepts the same parameter type as yours....static QString toNativeSeparators(const QString &pathName);
, https://doc.qt.io/qt-5/qdir.html#toNativeSeparators. -
@JonB , Qt Creator 4.2.1, Based on Qt 5.8.0 (MSCV 2015, 32 bit), thats the version on the laptop I'm using for this project and I can sure you that the version only excepts a const QString&, there is no alternative in this IDE.
-
@SPlatten
It has nothing to do with the IDE, at all.I can sure you
It does have to do with the behaviour of C++, and
QString
....Would you be kind enough to copy & paste my line into your version, and tell me the outcome, please? Show me the error message you get at compile-time, thank you.
-
@JonB , QDir::separator does not return a QString it returns a QChar.
-
@SPlatten
I KNOW THIS.HAVE YOU ACTUALLY TRIED IT, DESPITE WHAT YOU SAY??????????
-
@JonB How can I try it when it won't compile without errors? Stop shouting and calm down!
-
@SPlatten
Could you please put it into your code, and show me the compile-time error message you get, as requested? I should be most obliged.... -
@SPlatten Sorry, but I have to support @JonB here: that line of code compiles just fine.
"it returns a QChar" - which converts just fine to a QString (https://doc.qt.io/qt-5/qstring.html#QString-2). -
@JonB , sorry, I just don't have time to back tract now, apologies if I was wrong.