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

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

15

Решение

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

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

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

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

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

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

14

Другие решения

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

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

20

Как досадно, что в 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)

-1
По вопросам рекламы [email protected]