У меня проблемы с созданием и записью файлов на Android-устройство в Qt. Я безуспешно пробовал несколько разных примеров.

Этот пример должен записывать в папку Download внутреннего хранилища:

QString path = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);

qDebug() << path; // '/storage/emulated/0/Download'
qDebug() << "Exists? " << QFile::exists(path + "/401891.png"); // This is an existing image in the folder, returns true

QFile testFile(path.append("/Testing.txt"));
testFile.open(QFile::WriteOnly);

QTextStream out(&testFile);
out << "Hello";

testFile.close();
qDebug() << "Exists? " << QFile::exists(path + "/Testing.txt"); // Returns false

Я получаю это предупреждение:

Предупреждение: QIODevice :: write (QFile, "/storage/emulated/0/Download/Testing.txt"): устройство не открыто

Что мне не хватает и как это исправить?

2
user6635665 14 Сен 2018 в 21:17

2 ответа

Лучший ответ

Похоже, что разрешения не применялись, хотя они были указаны в манифесте.

Зайдите в Настройки -> Приложения -> Диспетчер приложений.

Найдите свое приложение и убедитесь, что переключатель разрешений «Хранилище» включен.

1
user6635665 18 Сен 2018 в 15:58

Вы ошиблись в последней строке, она дает:

.../Download/Testing.txt/Testing.txt/

Использование

qDebug() << "Exists? " << QFile::exists(testFile.fileName()); // Returns true
0
Mike Ovchinnikov 19 Фев 2019 в 12:44