Не удалось прочитать файлы в NDK C ++ с использованием fstream и ifstream - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь загрузить файл в NDK, используя ifstream, но он не может его прочитать.Я дважды проверил путь к файлу, и это не так.Эта же программа работает в обычном C ++ (без JNI).

#include <jni.h>
#include <string>
#include <iostream>
#include <istream>
#include <sstream>
#include <fstream> 
using namespace std;
extern "C"
{

JNIEXPORT jstring JNICALL Java_com_example_aaaaatrytest_MainActivity_stringFromJNI(JNIEnv *env, jobject /* this */) {
    string file_path = "/home/moe/Desktop/blah.txt";
    std::ifstream fim(file_path);
    if(fim.is_open())
    {
    string pass = "File Loaded";
    return env->NewStringUTF(pass.c_str());
    }
    else{
    std::string fail = "Failed to load file";
    return env->NewStringUTF(fail.c_str());
    }
}
}

После удаления if-else и отладки выводится отладчик:

SIGTRAP (signal SIGTRAP)
env = {JNIEnv * | 0x55bc7ccc00} 0x00000055bc7ccc00
{jobject | 0x7fcefb1af4} 0x0000007fcefb1af4

Я пыталсяиспользовать fstream вместо ifstream, но с той же ошибкой.Я также предоставил разрешение на запись и чтение во внешнем хранилище в manifest.xml, но это не помогло.Эта проблема не зависит от формата, так как я пытался поместить разные файлы в путь.Почему не удается прочитать файл?

1 Ответ

0 голосов
/ 09 февраля 2019

Я скопировал файл на мое устройство и указал путь для Android, но он все равно не читается.Путь моего Android к файлу выглядит следующим образом "/storage/emulated/0/abc/abc.txt".

Вашему приложению необходимо разрешение READ_EXTERNAL_STORAGE.

Вот небольшой фрагмент кода, которыйпомогает запрашивать это разрешение во время выполнения: см. Разрешение READ_EXTERNAL_STORAGE в манифесте, но все еще не работает .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...