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

23

我可以这样从 Qml 中获取文件路径:

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

上述文件路径看起来像这样: file:///C:/uuuu.a3

但是当这个路径被传递给QFile时,它会报错。

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

如何解决这个问题?

4个回答

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

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


3
这是针对问题的正确答案,而不是被接受的答案。 - Ayberk Özgür

17

QString并不适用于规范的url表示。它是一个字符串类,主要存在于utf用例中。

你需要使用的是QUrl,它是为像这样的用例而设计的。将你的路径传递给它,然后从中获取“QFile可读取”的路径,然后将其传递给QFile。

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

静态的 QUrl QUrl::fromLocalFile(const QString & localFile)

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

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


9
对于我而言,QUrl( "file:///C:/myfile.txt" ).toLocalFile(); 可以将其转换为 "C:/myfile.txt",而 fromLocalFile 看起来只是在前面添加了 "file:///"。另请参见下面的回答 - handle

5

很令人不爽的是QML没有这些东西。我已经创建了一个帮助函数,它可以从QML中调用:

Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const;

这只是做了这个事情:
QString OurClassName::convertUrlToNativeFilePath(const QUrl& urlStylePath) const
{
    return QDir::toNativeSeparators(urlStylePath.toLocalFile());
}

谢谢,这很有帮助。 - arynaq

-1

看一下QDir::toNativeSeparators(QString)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接