Подтвердить что ты не робот

QFile не распознает файл:///URL-адрес пути

Я получаю путь к файлу из Qml следующим образом:

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

Вышеуказанный путь к файлу выглядит так: file:///C:/uuuu.a3

Но когда этот путь передается QFile, он жалуется

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

Как решить эту проблему?

4b9b3361

Ответ 1

QString не предназначался для канонического представления url. Это класс строк, существующий в основном из-за использования utf.

То, что вы ищете, это QUrl, предназначенный для подобных случаев. Пройдите свой путь к этому, а затем получите из него "QFile-читаемый" путь, затем передайте его в QFile.

Вам нужно будет использовать следующий метод для преобразования перед передачей пути к QFile:

QUrl QUrl:: fromLocalFile (const QString и localFile) [статические]

Возвращает представление QURl localFile, интерпретируемое как локальный файл. Эта функция принимает пути, разделенные косой чертой, а также собственный разделитель для этой платформы.

Эта функция также принимает пути с удвоенной косой чертой (или обратной косой чертой) для указания удаленного файла, как в "//servername/path/to/file.txt". Обратите внимание, что только определенные платформы могут фактически открыть этот файл, используя QFile:: open().

Ответ 2

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

Это, вероятно, то, что вам нужно. Он вернет "C:/uuuu.a3" в вашем случае.

Ответ 3

Как досадно, что у QML этого нет. Я создал вспомогательную функцию, которую можно вызвать из QML:

Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const;

Что просто делает это:

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

Ответ 4

Взгляните на QDir::toNativeSeparators(QString)