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

Dea*_*hen 17 c++ qt qml qurl qtcore

我从Qml获取文件路径,如下所示:

mainView.projectFilePath = Qt.resolvedUrl(newProjectFileDlg.fileUrl).toString();
Run Code Online (Sandbox Code Playgroud)

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

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

The filename, directory name, or volume label syntax is incorrect
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题呢?

小智 24

QUrl url(newProjectFileDlg.fileUrl);
url.toLocalFile();
Run Code Online (Sandbox Code Playgroud)

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

  • 这是对问题的正确答案,而不是被接受的答案。 (2认同)

lpa*_*app 13

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

您正在寻找的是QUrl,它适用于这样的用例.将您的路径传递给它,然后从中获取"QFile可读"路径,然后将其传递给QFile.

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

QUrl QUrl :: fromLocalFile(const QString&localFile)[静态]

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

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

  • 对我来说,`QUrl("file:/// C:/myfile.txt").toLocalFile();`转换为`"C:/myfile.txt"`而fromLocalFile似乎在前面添加``file: ///"`.另见[下面这个答案](http://stackoverflow.com/a/21837009/1619432). (6认同)

gre*_*ell 5

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

Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const;
Run Code Online (Sandbox Code Playgroud)

这只是这样做:

QString OurClassName::convertUrlToNativeFilePath(const QUrl& urlStylePath) const
{
    return QDir::toNativeSeparators(urlStylePath.toLocalFile());
}
Run Code Online (Sandbox Code Playgroud)