c++qtqmlqtcorequrl

QFile doesn't recognize file:/// url path format


I get the file path from Qml like this:

mainView.projectFilePath = Qt.resolvedUrl(newProjectFileDlg.fileUrl).toString();

The above file path looks like this: file:///C:/uuuu.a3

But when this path is passed to QFile, it complains

The filename, directory name, or volume label syntax is incorrect

How to solve this problem?


Solution

  • QString was not meant for a canonical url representation. It is a string class existing mostly due to the utf use cases.

    What you are looking for is QUrl which was meant for use cases like this. Pass your path to that, and then get the "QFile-readable" path out of that, then pass it to QFile.

    You will need to use the following method for the conversion before passing the path to QFile:

    QUrl QUrl::fromLocalFile(const QString & localFile) [static]

    Returns a QUrl representation of localFile, interpreted as a local file. This function accepts paths separated by slashes as well as the native separator for this platform.

    This function also accepts paths with a doubled leading slash (or backslash) to indicate a remote file, as in "//servername/path/to/file.txt". Note that only certain platforms can actually open this file using QFile::open().