我擔心關于 Qt 如何處理 Android 目錄的兩個問題。
- 例如,我想通過庫 (QuaZip) 下載存檔,但我需要沿著路徑“/ storage / emulated / 0 / Android / data /”下載它,然后在那里解壓縮。但問題是該檔案保存在補丁“/data/user/0/org.qtproject.example.NameApp”中。如何解決這個問題?我的代碼(它不太可能作業,但在 Windows 上它肯定會作業):
m_file.rename ("/storage/emulated/0/Android/data/cache.zip");
- 我可以通過 QProcess 在 Android 中打開檔案嗎?
uj5u.com熱心網友回復:
關于Android/datar/w 的第一個問題
在 Android 11Android/data上禁止沒有 root 的應用程式訪問,請參閱docs1和docs2。
對于讀/寫到其他位置:
- 目錄必須存在或必須創建(
QDir::mkpath()立即使用,或QDir::mkdir()依次使用子目錄,因為它不能創建目錄樹)。 QFile重命名前必須關閉。- 應用程式必須具有
android.permission.READ_EXTERNAL_STORAGE和android.permission.WRITE_EXTERNAL_STORAGE權限。 - 最后,在從 Qt Creator 部署應用程式后,在 Android 應用程式設定中手動批準檔案訪問權限。而且您可能還必須手動啟動應用程式,因為有關于從 IDE 啟動和從設備手動啟動時不同的應用程式行為的報告。
這段代碼對我有用(Android 11,Qt 5.15.2):
bool result;
QDir dir("/storage/emulated/0");
qDebug() << dir;
result = dir.mkdir("cache");
qDebug() << "mkdir(\"cache\") success: " << result;
QFile m_file(dir.path() "/cache/cache.txt");
result = m_file.open(QFile::WriteOnly);
qDebug() << "open() success: " << result;
m_file.close();
result = m_file.rename(dir.path() "/cache/cache.zip");
qDebug() << "rename() success: " << result;
關于你的第二個問題 QProcess
這段代碼對我有用:
QProcess process;
process.start("touch", QStringList() << "/storage/emulated/0/new_text_file.txt");
result = process.waitForFinished(1000);
qDebug() << "waitForFinished() success: " << result;
qDebug() << "errorString(): " << process.errorString();
該檔案new_text_file.txt出現在我的設備存盤中。如果您指定要啟動的檔案型別,我可以更準確地回答。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/313874.html
上一篇:如何在qml中實作嵌套串列模型
