2014-01-07 141 views
13

我得到像設爲Qml該文件路徑:QFile時無法識別的文件:/// URL路徑格式

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

上述文件的路徑是這樣的:文件:/// C:/ UUUU .a3

但是,當這個路徑傳遞給QFile時,它抱怨

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

如何解決這個問題呢?

回答

12

QString不是爲了規範的URL表示。這是一個主要由於utf用例而存在的字符串類。

你在找什麼是QUrl這是爲了這樣的用例。通過你的路徑,然後獲得「QFile可讀」路徑,然後傳遞給QFile。

你需要傳遞的路徑,一個QFile之前,請使用以下方法進行轉換:

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

返回LOCALFILE的QUrl表示,解釋爲本地文件。此函數接受由斜線分隔的路徑以及此平臺的本機分隔符。

該函數還接受具有加倍前導斜槓(或反斜槓)的路徑來指示遠程文件,如「//servername/path/to/file.txt」中所示。請注意,只有某些平臺可以使用QFile :: open()實際打開此文件。

+4

對我來說,'QUrl(「文件:/// C:/myfile.txt 「).toLocalFile();'轉換爲''C:/myfile.txt」',而來自LocalFile的文件似乎預先加載了'「file:///」'。另請參閱[下面的這個答案](http://stackoverflow.com/a/21837009/1619432)。 – handle

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

這可能是你所需要的。它會在你的情況下返回「C:/uuuu.a3」。

+1

這是對問題的正確答案,而不是接受的答案。 –

-1

看一看 QDir::toNativeSeparators(QString)

4

如何煩人,QML沒有這個東西。我創建了一個輔助函數可以從QML調用:

Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const; 

它只是做到這一點:

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

謝謝,這很有幫助 – arynaq

相關問題