QFile无法识别file:/// url路径格式

时间:2014-01-07 08:35:55

标签: c++ qt qml qtcore qurl

我从Qml那里得到文件路径:

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

上面的文件路径如下所示:file:/// C:/uuuu.a3

但是当这条路径传递给QFile时,它会抱怨

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

如何解决这个问题?

4 个答案:

答案 0 :(得分:21)

QUrl url(newProjectFileDlg.fileUrl);
url.toLocalFile();

这可能就是你所需要的。它会在你的情况下返回“C:/uuuu.a3”。

答案 1 :(得分:14)

QString不适用于规范网址表示。它是一个字符串类,主要是由于utf用例。

您正在寻找的是QUrl,它适用于此类用例。将您的路径传递给它,然后从中获取“QFile可读”路径,然后将其传递给QFile。

在将路径传递给QFile之前,您需要使用以下方法进行转换:

  

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

     

返回localFile的QUrl表示形式,解释为本地文件。此函数接受由斜杠分隔的路径以及此平台的本机分隔符。

     

此函数还接受带有加倍前导斜杠(或反斜杠)的路径来指示远程文件,如“//servername/path/to/file.txt”中所示。请注意,只有某些平台可以使用QFile :: open()实际打开此文件。

答案 2 :(得分:4)

QML没有这个东西有多烦人。我创建了一个可以从QML中调用的辅助函数:

Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const;

这就是:

QString OurClassName::convertUrlToNativeFilePath(const QUrl& urlStylePath) const
{
    return QDir::toNativeSeparators(urlStylePath.toLocalFile());
}

答案 3 :(得分:-1)

看一看 QDir::toNativeSeparators(QString)

相关问题